C++ 如何在Qt中强制绘制?

C++ 如何在Qt中强制绘制?,c++,qt,C++,Qt,我有一个QMainWindow实例,它连续地需要读取xml文件。第一个文件包含构建ui所需的所有信息,第二个文件包含所有元数据。因此,在我的主窗口的open函数中,我希望在读取第一个文件后绘制ui,如: 在主窗口的打开范围中: 但上述情况没有任何影响。如何在读取第二个文件之前强制绘制?如果需要立即重新绘制,可以使用“重新绘制”而不是“更新” 从QWidget::update的Qt文档 此功能不会导致立即重新绘制;相反,当Qt返回到主事件循环时,它会安排一个绘制事件进行处理。这使得Qt能够比调用r

我有一个QMainWindow实例,它连续地需要读取xml文件。第一个文件包含构建ui所需的所有信息,第二个文件包含所有元数据。因此,在我的主窗口的open函数中,我希望在读取第一个文件后绘制ui,如:

在主窗口的打开范围中:


但上述情况没有任何影响。如何在读取第二个文件之前强制绘制?

如果需要立即重新绘制,可以使用“重新绘制”而不是“更新”

从QWidget::update的Qt文档

此功能不会导致立即重新绘制;相反,当Qt返回到主事件循环时,它会安排一个绘制事件进行处理。这使得Qt能够比调用repaint优化更快的速度和更少的闪烁


如果需要立即重新绘制,可以使用重新绘制而不是更新

从QWidget::update的Qt文档

此功能不会导致立即重新绘制;相反,当Qt返回到主事件循环时,它会安排一个绘制事件进行处理。这使得Qt能够比调用repaint优化更快的速度和更少的闪烁


这似乎是正确的,但会导致这种行为:一旦调用“重新绘制”,在主窗口中创建的对象就会消失,即:一些按钮和一个反向图像,但在读取第一个文件时创建的对象在读取第二个文件完成时会显示。我猜您的文件读取方法正在阻塞,需要一些时间吗?如果是这样的话,你也许应该在后台线程或其他什么程序中运行它们,或者我不知道为什么你的UI的其余部分正在消失。我需要弄清楚是什么阻止了重新绘制。现在这个问题已经得到了明确的回答。Thanks@tobilocker你阻止了重画。文件读取是在主线程中完成的:当它发生时,UI没有响应。如果不这样做,您的问题将自动得到解决。这似乎是正确的,但会导致以下行为:一旦调用了重新绘制,在主窗口中创建的对象消失了,即:一些按钮和回退图像,但在读取第一个文件时创建的对象在读取第二个文件完成时将显示。我猜您的文件读取方法被阻塞,需要一些时间吗?如果是这样的话,你也许应该在后台线程或其他什么程序中运行它们,或者我不知道为什么你的UI的其余部分正在消失。我需要弄清楚是什么阻止了重新绘制。现在这个问题已经得到了明确的回答。Thanks@tobilocker你阻止了重画。文件读取是在主线程中完成的:当它发生时,UI没有响应。如果不这样做,您的问题将自动得到解决。我认为您这样做是因为文件读取速度慢,并且您希望UI做出响应。相反,将文件读取分散到线程池,并让辅助函子线程安全地更新UI的状态。绘制将自动完成,您无需担心,因为事件循环将继续旋转以处理来自工作者的数据。我认为您这样做是因为文件读取速度慢,并且您希望UI做出响应。相反,将文件读取分散到线程池,并让辅助函子线程安全地更新UI的状态。绘制将自动完成,您无需担心,因为事件循环将继续旋转以处理来自工人的数据。
readFirstFile(QString filename);
update();
readSecondFile(QString filename);