Qt主线程处理耗时操作时,由于时间太长导致界面处于“假死”状态,不再响应其它操作;在这种情况下一般会使用多线程,既在子线程中进行耗时操作,如果不想使用多线程,最简单的办法就是使用QApplication::processEvents()。
void QCoreApplication::processEvents ( QEventLoop::ProcessEventsFlags flags = QEventLoop::AllEvents ) [static]
Qt助手解释:根据指定的标志处理调用线程的所有挂起事件,直到没有更多的事件要处理。当程序忙于执行长时间操作(例如复制文件)时,可以偶尔调用此函数。如果正在运行连续调用此函数的本地循环,而没有事件循环,则不会处理DeferredDelete事件。这可能会影响依赖DeferredDelete事件正常运行的小部件(例如QToolTip)的行为。另一种方法是从本地循环中调用sendPostedEvents()。
调用此函数仅处理调用线程的事件。
注意:此函数是线程安全的。
其它应用:非阻塞延时
QTime time;
time.start();
while(time.elapsed() < 1000) //等待时间1秒钟
{
QCoreApplication::processEvents(); //不停地处理事件,让程序保持响应
}