首页 > 其他分享 >Qt事件exec, eventloop

Qt事件exec, eventloop

时间:2022-09-21 09:57:30浏览次数:90  
标签:跳出 Qt exec 队列 eventloop 循环 事件

1、事件循环一般用exec()函数开启。QApplicaion::exec()、QMessageBox::exec()都是事件循环。其中前者又被称为主事件循环。

事件循环首先是一个无限“循环”,程序在exec()里面无限循环,能让跟在exec()后面的代码得不到运行机会,直至程序从exec()跳出。从exec()跳出时,事件循环即被终止。QEventLoop::quit()能够终止事件循环。

其次,之所以被称为“事件”循环,是因为它能接收事件,并处理之。当事件太多而不能马上处理完的时候,待处理事件被放在一个“队列”里,称为“事件循环队列”。当事件循环处理完一个事件后,就从“事件循环队列”中取出下一个事件处理之。当事件循环队列为空的时候,它和一个啥事也不做的永真循环有点类似,但是和永真循环不同的是,事件循环不会大量占用CPU资源。

事件循环的本质就是以队列的方式再次分配线程时间片。

2、事件循环是可以嵌套的,一层套一层,子层的事件循环执行exec()的时候,父层事件循环就处于中断状态;当子层事件循环跳出exec()后,父层事件循环才能继续循环下去。

另外,子层事件循环具有父层事件循环的几乎所有功能。Qt会把事件送到当前生效的那个事件循环队列中去,其中包括Gui的各种事件。所以用户在主线程中执行各种exec()(如QMessageBox::exec(),QEventLoop::exec())的时候,虽然这些exec()打断了main()中的QApplication::exec(),但是Gui界面仍然能够正常响应。

3、如果某个子事件循环仍然有效,但其父循环被强制跳出,此时父循环不会立即执行跳出,而是等待子事件循环跳出后,父循环才会跳出。

转载:Qt事件循环的一些理解(exec、eventloop)

标签:跳出,Qt,exec,队列,eventloop,循环,事件
From: https://www.cnblogs.com/mmmmmmmmm/p/16714552.html

相关文章

  • PyQt完整入门教程
    PyQt完整入门教程https://blog.csdn.net/baidu_37503452?spm=1000.2115.3001.53431、GUI开发框架简介19年来,一直在做AndroidROM相关测试,也有了一定的积累;20年......
  • Qt显示中文
    当航至【C/C++】—>【命令行】—>【其他选项】,添加以下参数:/execution-charset:utf-8参考:/execution-charset(Setexecutioncharacterset)/utf-8(Setsourceande......
  • Qt官方示例Demo介绍 以及 Qt Examples and Demos(Qt的例子和演示)(转)
    Qt官方示例Demo介绍:https://blog.csdn.net/qq582880551/article/details/123313751QtExamplesandDemos(Qt的例子和演示):https://blog.csdn.net/luoting2017/article/......
  • Qt从QWidget继承实现自定义控件,显示之后不响应鼠标点击,但可以响应Tab按键
    1、自定义类ccustomwidget.h2、自定义类ccustomwidget.cpp3、ccustomwidget.ui4、mainwindow.h5、mainwindow.cpp 6、显示效果(checkBox可以显示鼠标点击,但CCus......
  • qt报“Error:Could not decode “xxx“ with“UTF-8“
     qt里导入vs里创建的一个包含中文注释的头文件,中文注释显示为乱码,并报错“Error:Couldnotdecode“xxx“with“UTF-8“,editingnotpossible”解决办法:点击文件上......
  • Qt学习路线 基于 Qt6.2.4 (更新中)
    环境环境版本windows10QT6.2.4QtCreator8.0.1(Community)qmake路线熟悉语法跟着菜鸟教程C++熟悉基本的C++语法,能看懂C++代码即可。......
  • Python桌面应用开发 ——— PyQT5
    Qt是一个跨平台的C++开发库,主要用来开发图形用户界面(GraphicalUserInterface,GUI)程序,当然也可以开发不带界面的命令行(CommandUserInterface,CUI)程序。PyQT5简介PyQt......
  • [杂项]World.execute(me)
    \[\mathit{Switch~on~the~power~line}\]\[\mathit{Remember~to~put~on}\]\[\mathit{PROTECTION}\]\[\mathit{Lay~down~your~pieces}\]\[\mathit{And~let~^\primes~beg......
  • qt creator 使用 git
    创建仓库在github,gitee这样的平台上,创建一个仓库,注意不要初始化仓库配置项目创建项目的时候,cvs选择git工具。tool->git->remoterepo->manageremote,......
  • about_Execution_Policies 报错解决方案
    在vscode中执行npm命令时,报错yarn:无法加载文件C:\Users\xx\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅https:/go.microsoft.c......