我正在使用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;
}
感谢您的帮助 尼莎米勒
答案 0 :(得分:1)
setPixmap()
调用update()
对另一个绘制事件进行排队,导致无限循环。
经常发送绘制事件,并且操作应该尽可能便宜。考虑提前设置像素图以响应信号或事件,或重新实施QLabel
及其paintEvent()
。