您的位置:首页 > 编程语言 > Qt开发

QT学习之事件处理(二) 处理密集响应时的响应保持

2013-11-18 14:42 381 查看
当处理一个事件时,也可能会同时产生一些其它的事件,如果再处理一个特定的事件上耗费的时间比较多,那么用户界面就会变得无法响应。例如,在应用程序中把一个文件保存到磁盘中,直到文件保存完毕,才会处理那些由于窗口系统产生的事件。在文件保存的过程中,应用程序就不能响应来自窗口系统的重新绘制请求。

一种解决方法当然是用多线程:一个线程用于处理应用程序的界面,另外一个程序则执行文件操作。

另外一种更为简单的方式是在文件保存的代码中频繁调用QApplication::processEvents();这个函数告诉QT处理那些所有还没有被处理的各类事件,然后再将控制权返还给调用者,使用这种方式存在一个潜在的问题,即用户也学在应用程序中还在保存文件就关闭了,或者甚至在保存文件的时候又单击了一次File->save,这样就可能产生意外的后果,最简单的解决方式是将processEvents()替换为processEvents(QEventLoop::ExcludeUserInputEvents);

除使用多线程和QProcessDialog之外,还有一种处理长时间运行操作的完全不同的方式,在QT中,通过使用一个0毫秒定时器,只要没有其它尚未处理的事件,就可以触发这个定时器

总结下就是QT中解决上述问题有三种方式 1:多线程 2:在处理耗时事件时频繁调用QApplication::processEvents 3:启动0毫秒定时器,推迟处理
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: