2017-02-15 60 views
1

我有一个QMainWindow实例,它连贯地需要读取到xml文件。第一个文件包含构建UI和第二个所有元数据的所有必要信息。所以在我的MainWindowopen功能我想读的第一个文件等之后再刷UI:如何在Qt中执行绘画?

MainWindowopen范围:

readFirstFile(QString filename); 
update(); 
readSecondFile(QString filename); 

但上面没有任何影响。如何在阅读第二个文件之前执行绘画?

+0

我认为你这样做是因为文件读取是“慢”,并且你希望UI响应回应。相反,将文件读取用于线程池,并让工作者函数线程安全地更新UI的状态。绘画将自动完成,无需担心,因为事件循环将继续旋转以处理来自工人的数据。 –

回答

4

如果您需要立即重绘,您可以使用repaint()而不是update()

QWidget::update()

Qt的文档,此功能不会导致立即重绘;相反,当Qt返回主事件循环时,它会安排一个绘制事件进行处理。这允许Qt优化以获得更快的速度和更少的闪烁,而不是重绘()的调用。

+0

这似乎是正确的,但会导致这种行为:只要调用repaint(),在MainWindow中创建的对象消失(即:某些按钮和背景图像),但读取第一个文件时创建的对象将显示当阅读第二个文件完成 – tobilocker

+0

我猜你的文件阅读方法是阻塞,需要一段时间呢?如果是这样,你应该可能在后台线程或其他东西中运行它们,或者我不知道为什么其他用户界面会“消失”。 – xander

+0

我需要弄清楚什么阻止重绘。目前这个问题已经清楚地回答了。谢谢 – tobilocker