我正在使用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()
。