【问题标题】:Problem in constructor?构造函数有问题?
【发布时间】:2011-05-09 04:10:48
【问题描述】:

嗨 我的代码有问题,以下代码重新调整了错误

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("Hello",this); w1->显示(); w6->显示(); }

NewWindow::~NewWindow() { 删除用户界面; }

请帮助我。 提前感谢您的帮助。

【问题讨论】:

    标签: qt4


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

    【讨论】:

      【解决方案2】:

      1) 正如已经指出的那样,QPushButton 没有将 QString * 和 QWidget * 作为参数的构造函数。我认为您可能对通过引用传递和传递指针感到困惑。

      2) DrawText 的函数签名是

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

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

      painter1.drawText( point1, *text_str );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多