构造函数中的问题?

时间:2011-05-09 04:10:48

标签: qt4

您好 我在代码中遇到问题,以下代码重新调整错误

没有用于调用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(父),     ui(新的Ui :: NewWindow) {     UI-> setupUi(本);    w1 = new MainWindow(“你好”,这个);     W1->显示();        w6->显示(); }

NewWindow ::〜NewWindow() {     删除ui; }

请帮帮我。 预先感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

  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)或类似。< / LI>
  2. drawText()错误我不太明白,因为签名似乎没问题。有点不清楚,text_str是什么类型。如果这是指向QString的指针,它也不起作用,但错误消息应该略有不同。 (另外,你唯一的drawText调用中给出的点不是QPointF而是QPoint,所以我认为错误和你发布的代码之间存在一些不一致的地方)

答案 1 :(得分:0)

1)正如已经指出的那样,QPushButton没有构造函数需要QString *&amp; QWidget *作为参数。我想你可能会在传递引用和传递指针之间感到困惑。

2)DrawText的函数签名是

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

而text_str似乎是一个指向QString的指针。 所以使用,

painter1.drawText( point1, *text_str );
相关问题