一句话概述:作用是处理密集型耗时的事情。
有时候需要处理一些跟界面无关的但非常耗时的事情,这些事情跟界面在同一个线程中,由于时间太长,导致界面无法响应,处于“假死”状态。例如:在应用程序中保存文件到硬盘上,从开始保存直到文件保存完毕,程序不响应用户的任何操作,窗口也不会重新绘制,从而处于“无法响应”状态,这是一个非常糟糕的体验 。
在这种情况下,有一种方法是使用多线程,即在子线程中处理文件保存,主线程负责界面相关。
而如果不想使用多线程,最简单的办法就是在文件保存过程中频繁调用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