Qt主线程耗时操作的处理:processEvents()函数

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();   //不停地处理事件,让程序保持响应
}             
    

猜你喜欢

转载自blog.csdn.net/yulong_abc/article/details/128985907