0

我无法弄清楚为什么我不能返回我的函数。有任何想法吗?

我得到的错误是;'*' 标记和 ')' 标记之前的预期主表达式。

(不确定这是 C++ 还是 Qt 错误,我不是这两个方面的专家)

int MainWindow::createPacket(const QString &source)

    {
        QGraphicsView *editor = new QGraphicsView;
        int tabIndex = packet->addTab(editor, source); 
        packet->setCurrentIndex(tabIndex);

        return paintEvent(QPaintEvent*); <<<<<<<<< The line the error appears on.
    }

    void MainWindow::paintEvent(QPaintEvent*)
    {
        QPainter painter(this);
        painter.setRenderHint(QPainter::Antialiasing);
        painter.setPen(Qt::black);

        QRect rect = QRect(10, 20, 70, 40);
        painter.drawText(rect, Qt::AlignCenter,
                         "Source");
        painter.drawRect(rect);
    }
4

2 回答 2

2

QPaintEvent*是一种类型。当你调用一个函数时,你不会将对象作为参数传递,而不是类型。

另外,由于参数 topaintEvent没有被命名,也没有被使用,为什么它在那里呢?为什么不简单地使用:

void MainWindow::paintEvent()
{
   //...
}

代码无效,我无法想象它是如何工作的,或者你期望发生什么。这是基本的东西,在你开始使用 Qt 之前,我建议你先学习 C++(这并不意味着居高临下,只是一个建议)。

一个有效的调用将是,例如:

QPaintEvent* qpaintEventPointer = NULL;
paintEvent(qpaintEventPointer);

但这是无效的,因为paintEvent返回void,而调用上下文返回int

要返回一个函数本身,您需要返回一个函数指针,而不是int像您所做的那样,并且您不需要完整的签名,只需一个return paintEvent...

底线。

于 2012-12-30T20:16:46.137 回答
1

即使您调用MainWindow::paintEvent()正确,此函数也不会返回任何内容,并且应该在系统需要绘制您的小部件时自动调用(请参阅文档

我不确定您要做什么,但要触发重绘,您要调用 repaint(),而不是 paintEvent()。

于 2012-12-30T20:50:06.643 回答