QLabel内部的绘画递归地调用paintEvent



我正在使用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;
}

感谢您的帮助妮莎·米勒

setPixmap()调用update(),这会将另一个绘制事件排队,从而导致无限循环。

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

最新更新