QLabel中的绘画以递归方式调用paintEvent

时间:2016-07-14 23:55:49

标签: qt

我正在使用QLabel在Qt 5应用程序中绘制图形。我正在安装一个事件过滤器,而不是继承QLabel。事件过滤器确实被调用,QLabel中的绘画确实有效。问题是事件过滤器被递归调用,我的cpu达到100%的使用率。

我在这里做错了什么?

这是我的代码:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->label->installEventFilter(this);
}

bool MainWindow::eventFilter(QObject *obj, QEvent *ev)
{
    if ((obj == ui->label) && (ev->type() == QEvent::Paint))
    {
        QPixmap pix(50, 50);
        pix.fill(Qt::blue);
        ui->label->setPixmap(pix);
    }
    return false;
}

感谢您的帮助 尼莎米勒

1 个答案:

答案 0 :(得分:1)

setPixmap()调用update()对另一个绘制事件进行排队,导致无限循环。

经常发送绘制事件,并且操作应该尽可能便宜。考虑提前设置像素图以响应信号或事件,或重新实施QLabel及其paintEvent()