Проблема в конструкторе?

#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:

  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) или аналогичный.
  2. Ошибку 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 );