取消

qt添加进度条或遮罩层时界面卡死

在Qt开发时有一个需要很长时间运行的逻辑,这时候界面会卡死,为了避免这时点击到界面,需要增加一个遮罩。但是增加了遮罩没有显示出来。


问题

在Qt开发时有一个需要很长时间运行的逻辑,这时候界面会卡死,为了避免这时点击到界面,需要增加一个遮罩。但是增加了遮罩没有显示出来。看现象是遮罩也被卡死了。以前在开发.net时都是通过Thread.Sleep(0)来让出线程更新界面的。但是在qt中机制不一样,没有效果。

解决

在更新遮罩进度时需要执行一次QCoreApplication::processEvents();

原因

这里注意使用QCoreApplication::processEvents()是防止界面假死,该函数的作用是让程序处理那些还没有处理的事件,然后再把使用权返回给调用者。

因为弹出的等待对话框是模式的,因此在他运行期间鼠标是无法点击父窗口的。这样防止了用户在任务没有处理完时误点击关闭了主窗口。


参考资料

本文会经常更新,请阅读原文: https://dashenxian.github.io/post/qt%E6%B7%BB%E5%8A%A0%E8%BF%9B%E5%BA%A6%E6%9D%A1%E6%88%96%E9%81%AE%E7%BD%A9%E5%B1%82%E6%97%B6%E7%95%8C%E9%9D%A2%E5%8D%A1%E6%AD%BB ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

知识共享许可协议

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 小神仙 (包含链接: https://dashenxian.github.io ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 (125880321@qq.com)

登录 GitHub 账号进行评论