Проблема в конструкторе? - PullRequest
0 голосов
/ 09 мая 2011

Привет У меня есть проблема в коде, что следующий код переустанавливает ошибку,

нет соответствующей функции для вызова QpushButton :: QPushButton (QString * &, QWidget * &)
и

нет соответствующей функции для вызова QPainter :: drawText (const QPointF &, const QString &)

и код

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 * parent): QMainWindow (родитель), пользовательский интерфейс (новый пользовательский интерфейс :: NewWindow) { ui-> setupUi (это); w1 = новое MainWindow («Привет», это); w1-> показать (); w6-> показать (); }

NewWindow :: ~ NewWindow () { удалить пользовательский интерфейс; }

Пожалуйста, помогите мне. Заранее спасибо за вашу помощь.

Ответы [ 2 ]

2 голосов
/ 09 мая 2011
  1. QPushButton принимает ссылку QString, а не указатель, см. http://doc.trolltech.com/4.7.1/qpushbutton.html#QPushButton-2 Поэтому вы должны изменить конструктор MainWindow::MainWindow(QString *str,QWidget *parent) на MainWindow::MainWindow(const QString &str,QWidget *parent) или аналогичный.
  2. Ошибка drawText (), которую я не совсем понимаю, потому что подпись кажется нормальной. Немного неясно, что это за тип text_str. Если это указатель на QString, он также не будет работать, но сообщение об ошибке должно немного отличаться. (Также точка, указанная в вашем единственном вызове drawText, не QPointF, а QPoint, поэтому я думаю, что между ошибками и отправленным вами кодом есть что-то непоследовательное)
0 голосов
/ 10 мая 2011

1) Как уже указывалось, QPushButton не имеет конструктора, который принимает QString * & QWidget * в качестве аргументов. Я думаю, вы можете быть запутаны между передачей по ссылке и передачей указателя.

2) Подпись функции для DrawText:

void QPainter::drawText ( const QPoint & position, const QString & text )

тогда как text_str кажется указателем на QString. Так что пользуйтесь,

painter1.drawText( point1, *text_str );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...