Qt 如何处理密集型耗时的事情

频繁主动调用QCoreApplication::processEvents()

https://blog.csdn.net/lixiangmaty/article/details/79452553
https://www.cnblogs.com/findumars/p/5607683.html

UI线程中耗时函数,可能会导致界面假死。

QCoreApplication::processEvents()。该函数的作用是让程序处理那些还没有处理的事件,然后再把使用权返回给调用者

QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents);//它可以忽略用户的输入(鼠标和键盘事件)。

控制光标显示
QApplication::setOverrideCursor(Qt::WaitCursor);
QApplication::restoreOverrideCursor();

调用 Void QApplication::processEvents() 或 void QApplication::processEvents ( int maxtime ) 来强迫事件循环进行,但是这种做法是有潜在风险的。

按照QCoreApplication:processEvents()可能会引起递归,导致栈溢出崩溃的说法,当主线程在某个槽函数里正在执行processEvents时,

刚好有一个能响应此槽函数的信号发送过(肯定是其他线程发的信号), 这时就可能会发生可怕的递归, 导致栈溢出崩溃。

原因是processEvents在处理自己槽函数的事件时,又会调用到processEvents,进入到无尽的递归中。

原文地址:https://www.cnblogs.com/zhangxuan/p/11820049.html