一句话概述:作用是处理密集型耗时的事情。

有时候需要处理一些跟界面无关的但非常耗时的事情,这些事情跟界面在同一个线程中,由于时间太长,导致界面无法响应,处于“假死”状态。例如:在应用程序中保存文件到硬盘上,从开始保存直到文件保存完毕,程序不响应用户的任何操作,窗口也不会重新绘制,从而处于“无法响应”状态,这是一个非常糟糕的体验 。

在这种情况下,有一种方法是使用多线程,即在子线程中处理文件保存,主线程负责界面相关。

而如果不想使用多线程,最简单的办法就是在文件保存过程中频繁调用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(用户输入事件,包括键盘和鼠标),所以才会出现点击按钮不响应。

一句话概述:作用是处理密集型耗时的事情。有时候需要处理一些跟界面无关的但非常耗时的事情,这些事情跟界面在同一个线程中,由于时间太长,导致界面无法响应,处于“假死”状态。例如:在应用程序中保存文件到硬盘上,从开始保存直到文件保存完毕,程序不响应用户的任何操作,窗口也不会重新绘制,从而处于“无法响应”状态,这是一个非常糟糕的体验 。 在这种情况下,有一种方法是使用多线程,即在子线程中处...
防止界面阻塞,很明确的一种方法就是再开一个线程。但有时也可以使用 process Event()。 Q Process Event()的 作用 是使程序进入消息循环,处理其他事件。可以用在需要执行很长时间的界面对象成员的循环中,在里面加一句 process Event()使界面不会出现卡死状态。 例子里实现按钮后页面等待2秒钟后弹出文字 void HelloQt::delaymsecNoBlock() 我在写tcp通信的时候,子线程处理接收并处理数据时是采用的do…while()循环处理。但是有大文件传输时会一直在这个循环中直到处理完毕,但此时客户端的心跳包还是会过来,且不会处理。 在do…while()循环中加入QCore Application :: process Events (),强行让隔段时间去检查还有没有事情没做完,知道所有工作处理完毕。 根据指定的标志处理调用线程的所有挂起事件,直到没有更多的事件要处理。 当你的程序正忙于执行一个长时间的操作(例如复制一个文件)时,
在使用Qt的过程中,经常会碰到需要运行耗时的逻辑代码的时候,一般都采用多线程进行处理,这样可以保证主线程(界面)不会被占用,导致用户操作无效,出现等待无响应现象。 Qt本身提供一个函数Q Application :: process Events ()来处理。 下面采用示例来进行解释 process Events 函数的功能 MainWindow::MainWindow(QWidget *parent)
应用场景一:处理密集耗时的事情 有时候需要处理一些跟界面无关的但非常耗时的事情,这些事情跟界面在同一个线程中,由于时间太长,导致界面无法响应,处于“假死”状态。例如:在应用程序中保存文件到硬盘上,从开始保存直到文件保存完毕,程序不响应用户的任何操作,窗口也不会重新绘制,从而处于“无法响应”状态,这是一个非常糟糕的体验 。      在这种情况下,有一种方法是使用多线程,即在子线程中处理文件保存,...
Go剪贴板( 应用程序) 使用Qt的功能将文本存储在剪贴板中或从剪贴板中加载或加载文本。 该分支使用qml.Common来调用QClipboard包装器。 这种方法(比 )要慢一点,但是代码要干净得多,而且往往更安全。 请参阅go-qml的。 如果满足,并且设置了PKG_CONFIG_PATH : $ go get gopkg.in/xlab/clipboard.v2 此剪贴板软件包可在go-qml支持的所有平台上使用。 需要安装的gopkg.in/qml.v1软件包(NB clipboard.v1 qml.v0分别取决于qml.v0 )。 附加信息: 软件包可能与go-qml机械不兼容,请参阅进度。 该软件包利用CGO和qml.Common来使用Q Application ::clipboard 。 基准也更好: BenchmarkReadAll