#qt4
#qt4
Вопрос:
Привет, у меня проблема в коде, следующий код перенастраивает ошибку, которая
нет соответствующей функции для вызова QPushButton::QPushButton(QString*amp;,QWidget *amp;)
и
нет соответствующей функции для вызова QPainter::DrawText (const QPointFamp;, const QString amp;)
и код является
MainWindow::MainWindow(QWidget *parent) :
QPushButton(parent)
{
//ui->setupUi(this);
//connect(this,SIGNAL(clicked()),this,SLOT(newWindow()));
}
MainWindow::MainWindow(QString *str,QWidget *parent) :
QPushButton(str,parent)
{
//ui->setupUi(this);
text_str=str;
connect(this,SIGNAL(clicked()),this,SLOT(newWindow()));
}
MainWindow::~MainWindow()
{
//delete ui;
}
void MainWindow::paintEvent(QPaintEvent* event)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
QPen pen(Qt::black);
pen.setWidth(6);
painter.setPen(pen);
static const QPointF points[6] = {
QPointF(300.0, 160.0),//Top Line
QPointF(220.0, 160.0),//
//QPointF(300.0, 180.0),
QPointF(195.0, 210.0),
QPointF(220.0, 260.0),//
QPointF(300.0, 260.0),//Bottom Line
QPointF(325.0, 210.0)
};
painter.drawPolygon(points, 6);
QPainter painter1(this);
QPen pen1(Qt::green);
painter1.setPen(pen1);
QLinearGradient grad1(300, 160, 325, 260);
QBrush brush1(grad1);
grad1.setColorAt(1.0, Qt::white);
painter1.setBrush(brush1);
QFont font("Times", 12);
painter1.setFont(font);
QPoint point1 = QPoint( 240, 225);
painter1.drawText( point1, text_str );
}
void MainWindow::newWindow()
{
FrameWindow *frm=new FrameWindow(this);
frm->show();
}
и класс mainnWindow вызывается следующим кодом
NewWindow::NewWindow(QWidget *родительский) : QMainWindow (родительский), ui (новый Ui::NewWindow) { ui-> setupUi(это); w1 = новое главное окно («Привет», это); w1-> показать(); w6-> показать(); }
NewWindow::~NewWindow() { удалить пользовательский интерфейс; }
Пожалуйста, помогите мне. Заранее благодарю за вашу помощь.
Ответ №1:
QPushButton
конструктор принимаетQString
ссылку, а не указатель, см. http://doc.trolltech.com/4.7.1/qpushbutton.html#QPushButton-2 Итак, вы должны изменить свой конструкторMainWindow::MainWindow(QString *str,QWidget *parent)
наMainWindow::MainWindow(const QString amp;str,QWidget *parent)
или аналогичный.- Ошибку DrawText () я не совсем понимаю, потому что подпись кажется нормальной. Немного неясно, что это за тип
text_str
. Если это указатель наQString
, это также не сработало бы, но сообщение об ошибке должно быть немного другим. (Также точка, указанная в вашем единственном вызове DrawText, — это не QPointF, а QPoint, поэтому я думаю, что есть что-то несовместимое между ошибками и опубликованным вами кодом)
Ответ №2:
1) Как уже указывалось, у QPushButton нет конструктора, который принимает QString * amp; QWidget * в качестве аргументов.Я думаю, вы, возможно, путаете передачу по ссылке и передачу указателя.
2) Сигнатура функции для DrawText является
void QPainter::drawText ( const QPoint amp; position, const QString amp; text )
тогда как text_str, похоже, является указателем на QString.
Поэтому используйте,
painter1.drawText( point1, *text_str );