2016-07-14 15 views
1

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

我在这里做错了什么?

这里是我的代码:

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

这是严重问的问题!你正在问如何解决某些神秘问题的不正确的解决方案,并且你甚至没有给出你想要解决什么样的问题。 –

+0

@MarekR为什么这个问题很严重? OP介绍了这个问题并发布了相关的代码。 –

+0

就像我写的,你在问如何解决你没有描述的一些问题的解决方案。我很确定你是否解释了你想要实现哪种功能,结果会更简单一些。 –

回答

1

setPixmap()电话update()哪个队列另一油漆事件,导致一个无限循环。

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

+0

啊,这解释了递归,谢谢。我通过重新使用qlabel中的pixmap来解决问题,所以我不必每次都设置它。 –

+0

@NishaMiller如果这解决了您的问题,请接受答案,以便更容易地帮助他人。 –