zeb*_*bra 24 c++ user-interface qt function
这似乎应该是自动的,但显然不是.我有以下代码:
ui.my_label->setText("Test 1...");
ui.my_label->adjustSize();
processThatTakesAbout30SecondsToFinish(files[0].toStdString());
ui.my_label->setText("Finished.");
ui.my_label->adjustSize();
Run Code Online (Sandbox Code Playgroud)
发生的事情是我从未看到"Test1...",
GUI似乎挂起,直到下面的函数完成,并且我通常只看到"完成.".
如何在进入该功能之前确保GUI正在更新?
谢谢.
Joa*_*son 26
如果您在输入代码之前,您可以处理事件队列;
#include <QApplication>
Run Code Online (Sandbox Code Playgroud)
并且,当您想要刷新GUI时,请致电;
qApp->processEvents();
Run Code Online (Sandbox Code Playgroud)
请注意,让您的长时间运行进程不时调用该函数可能是一个好主意,以使您的GUI感觉更具响应性.
Chr*_*ris 14
如果你不关心你的GUI在这段时间内是否有响应,那么调用my_label->repaint()
就可以了.Qt不能自动为你做任何事情,除非你屈服于事件循环.
为了获得最大响应,您可以考虑在单独的线程中运行您的进程,并使用信号/插槽连接(默认情况下是线程安全的)在处理完成时向您的主GUI线程发出信号.