QApplication::processEvents的作用
一句话概述:作用是处理密集型耗时的事情。有时候需要处理一些跟界面无关的但非常耗时的事情,这些事情跟界面在同一个线程中,由于时间太长,导致界面无法响应,处于“假死”状态。例如:在应用程序中保存文件到硬盘上,从开始保存直到文件保存完毕,程序不响应用户的任何操作,窗口也不会重新绘制,从而处于“无法响应”状态,这是一个非常糟糕的体验 。在这种情况下,有一种方法是使用多线程,即在子线程中处...
一句话概述:作用是处理密集型耗时的事情。
有时候需要处理一些跟界面无关的但非常耗时的事情,这些事情跟界面在同一个线程中,由于时间太长,导致界面无法响应,处于“假死”状态。例如:在应用程序中保存文件到硬盘上,从开始保存直到文件保存完毕,程序不响应用户的任何操作,窗口也不会重新绘制,从而处于“无法响应”状态,这是一个非常糟糕的体验 。
在这种情况下,有一种方法是使用多线程,即在子线程中处理文件保存,主线程负责界面相关。
而如果不想使用多线程,最简单的办法就是在文件保存过程中频繁调用QApplication::processEvents()。该函数的作用是让程序处理那些还没有处理的事件,然后再把使用权返回给调用者。
以上转自:https://www.cnblogs.com/findumars/p/5607683.html
作者的签名非常有意思:
朝闻道,夕可死矣!为了成为IT高手,为了挽回我失去的青春,也为了我亲爱的家人,下决心刻苦学习编程知识,虽九死而不悔! 金头盔飞行员蒋佳冀:知道了不行,熟悉也不够,要真正进入潜意识,成为条件反射才行。
一般来讲代码是这么写的:
while (g_running) {
a.processEvents();
}
while(t.elapsed()<1000000){
// QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents); //**注释1**
// QCoreApplication::processEvents(); //**注释2**
} // 这段代码来自:https://blog.csdn.net/xi__q/article/details/88351754
从上述代码中可以看出,processEvents函数主要是将正在处理的事情的控制权还给Qt,通俗点来说就是,正在干的事情太耗时间了。了processEvents函数后,会把这个耗时间的东西踢出来,自己一个去慢慢耗。我继续去监控其他的事件。
以上面两个例子来说,就是while循环太耗时了。我自己慢慢耗,将控制全交给QT。上面的两个循环,可以在主函数中调用,使得用户界面一直保持,直到g_running变为false。如果有保持用户界面的需求,可以使用这种方法。
processEvents函数中加参数QEventLoop::ExcludeUserInputEvents是屏蔽所有userInputEvent(用户输入事件,包括键盘和鼠标),所以才会出现点击按钮不响应。
更多推荐
所有评论(0)