qt 子窗口写到线程就卡死_深入了解QT消息循环及线程相关性

一、什么是Qt消息循环

Qt消息循环,就是从一个队列中不断取出消息,并响应消息的过程。窗体的鼠标、键盘、输入法、绘制,各种消息,都来自于Qt的消息循环。以Windows操作系统为例,Qt接管Windows原生窗口消息,并翻译成Qt的消息,派发给程序下的各个子对象、子QWidget等,通过接管层,可以很好屏蔽不同平台之间的差异性,开发人员不需要关心Windows或者X11的消息的差异性,只需要搞清楚各个QEvent之间是什么含义。

最开始的Qt消息循环开始于QCoreApplication::exec()。用户创建出一个QCoreApplication,或者说更多情况下是QApplication,执行QCoreApplication::exec(),一个应用程序便开始了。QCoreApplication会不断从操作系统获取消息,并且分发给QObject。

如果没有消息循环,那么Qt的信号和槽无法完全使用,有些函数也无法正确执行。举个例子,通过QueuedConnection连接的信号,其实是将一个事件压入了消息循环,如果没有QCoreApplication::exec(),那么这个消息循环将永远无法派发到指定的对象。

二、什么是线程相关性

准确点来说,应该是指QObject的线程相关性。以Qt文档中的示意图来作说明:

f3a892ecb7da9b4371108da85d093f60.png

当我们创建一个QObject时,它会与创建自己所在的线程绑定。它参与的消息循环,其实是它所在线程的消息循环,如上图所示。假如某个线程没有默认的QThread::exec(),那么该线程上的QObject则无法接收到事件。另外,如果两个不同线程的QObject需要相互通信,那么只能通过QueuedConnection的方式,异步通知对方线程,在下一轮消息循环处理QObject的消息。

QObject的线程相关性默认会和它的parent保持一致。如果一个QObject没有parent,那么可以通过moveToThread,将它的线程相关性切换到指定线程。

了解QObject的线程相关性非常重要,很多初学者常常分不清一个多线程中哪些QObject应该由主线程创建,哪些应该由工作线程创建,我的观点是,它参与哪个消息循环,就由哪个来创建。

正因为这样的特性,我们才可以理解什么叫做AutoConnection。通过AutoConnect连接的两个QObject,如果是在同一个线程,那么可以直接调用(DirectConnection),如果不是在同一个线程,那么就通过事件通知的方式(QueuedConnection)来调用。通过信号和槽、事件或者QueuedConnection方式来进行线程间的通讯,尤其是与UI线程通讯,永远是最优雅的方式之一。

希望大家看了这篇文章

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/70576.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QT编程过程中遇到的问题

QT编程过程中遇到的问题 (一)QT卡死(二)mingw转msvc编码问题(三)内存泄漏问题1. vld检查内存泄漏问题2. QTextEdit造成内存泄漏 (四)文件路径问题(5)快速生成…

QT 界面在linux下调试时卡死的问题

文章目录 一、问题描述二、解决方法(1)强杀进程(2)安装xnest(3)qt creater配置 一、问题描述 xnest是一个虚拟的X服务端,其窗口可以运行界面程序,电脑在调试弹窗时界面容易冻住&…

3月9日 19:30 | 首场大模型专场来袭

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 哔哩哔哩直播通道 扫码关注AI TIME哔哩哔哩官方账号预约直播 2023年3月9日 19:30-21:30 谢天宝: 香港大学一年级博士生,由余涛教授(主要)和孔令鹏教授指导&#…

AGI—从GPT和大型语言模型中汲取的经验教训

点击蓝字 关注我们 关注并星标 从此不迷路 计算机视觉研究院 公众号ID|计算机视觉研究院 学习群|扫码在主页获取加入方式 论文地址:https://arxiv.org/pdf/2306.08641.pdf 计算机视觉研究院专栏 Column of Computer Vision Institute 人工智能…

走向计算机视觉的通用人工智能:从GPT和大型语言模型中汲取的经验教训 (下)...

点击蓝字 关注我们 关注并星标 从此不迷路 计算机视觉研究院 公众号ID|计算机视觉研究院 学习群|扫码在主页获取加入方式 论文地址:https://arxiv.org/pdf/2306.08641.pdf 计算机视觉研究院专栏 Column of Computer Vision Institute 人工智能…

自动化系列(五)Python实现企业微信机器人

自动化系列(五)Python实现企业微信机器人 上期介绍了如何定时推送数据到钉钉群,这次介绍如何定时推送数据到企业微信群。 添加自定义机器人 创建群聊:企业微信没有场景群,可以拉三五好友进群,然后再给他…

企业微信机器人 api 使用

key 来自: 一、发送消息 function sendText(key , text , mentioned []) {try {axios({method: post,url: https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key key,data: {msgtype: text,text: {content: text,mentioned_list: mentioned}}})} catch (er…

每个人都可以用的开源微信机器人

经历过UOS web协议的重放荣光,又经过一段时间的封禁,又有大神把UOS web协议救回来了。免费的快乐又重新回来了,不是吗? 这意味着每个人都可以用Wechaty搞事情了,什么服务器通知,定时给女友发微信,群发消息…

WorkTool(一)企业微信群管理机器人实现

简介 WorkTool 主程序是一个开源的安卓应用 APP,不需要 root 权限就可以直接安装。 源码友情链接 测试发送消息 API 使用 WorkTool APP 来自动执行一个自己企微里的账号,并通过后台调用对应的 API 来驱动机器人自动执行任务,如收发消息、自…

用企业微信机器人搞事情

从把办公通信工具从微信迁移到企业微信后,群组里面多了一个叫“群聊机器人”的功能,如下图,我在某个群建了一个叫“测试”的机器人。 听名字会让人以为群里面有个能自动答复的机器人,它就能跟他对话。其实并不能,他的功…

VX线报机器人的使用

使用步骤: 1. 下载上面的压缩包,并解压到同一个文件夹,没有解压是使用不了的 2. 双击Update.exe来下载机器人框架核心文件 3. 把com.bbs.weiququ.vlw.dll文件移到Plugin文件夹下 4.双击【我的框架.exe】来启动机器人框架 5.在我的帐号页…

AI热潮来袭||网友:AI会不会抢自己的饭碗啊~~~

ChatGPT还没搞懂,平地一声雷,GPT-4重磅发布!瑟瑟发抖的吃瓜群众逐渐变多:AI会不会抢自己的饭碗啊~~~ 答案是:会! 人工智能助手“阿里小蜜”承担95%的客服咨询; 机器人“天巡”接替运维人员以…

用友助力中核集团建设财务共享中心新华发电分中心,实现业财融合

企业在进行决策时需要大量的财务信息作为依据,财务共享中心的建设可以帮助企业将财务和业务分离后重新有序融合,使得决策数据更有价值,也帮助企业的管理和决策更加贴合实际。 新华水力发电有限公司(简称“新华发电”)…

【占星学】天蝎座女生性格特点

一、性格特点 天蝎座女的个性非常细腻,拥有非常敏锐的观察能力,外表总是一副冷漠的样子,但其实她们内心非常希望能够有一个人懂自己,天蝎座的女生其实是典型的外冷内热。此外,天蝎座的女生骨子里有争强好胜的性格&…

html星座代码,各星座详细页面.html

各星座详细页面 $axure.utils.getTransparentGifPath function() { return resources/images/transparent.gif; }; $axure.utils.getOtherPath function() { return resources/Other.html; }; $axure.utils.getReloadPath function() { return resources/reload…

如何搭建产品知识库?让产品知识库管理更有序高效!

任何一款成功的产品,都需要将自己的产品知识(内部制作和外部搜集)进行汇总和整理,帮助用户可以运用产品知识库中的内容,去解决实际应用中存在的问题。 有序高效的知识库管理 当一款产品从研发到投入使用,整…

基于GPT搭建私有知识库聊天机器人(一)实现原理

文章链接: 基于GPT搭建私有知识库聊天机器人(二)环境安装 基于GPT搭建私有知识库聊天机器人(三)向量数据训练 基于GPT搭建私有知识库聊天机器人(四)问答实现 1、成品演示 支持微信聊天支持网…

对阿,为什么大学程序设计老师不去外面公司当程序员?

我在大学的时候,老师都感觉很厉害的样子,一节课讲下来不带断句的(当然也碰到过一本书照着念不错一个字的)大学老师的工资应该没程序员的工资高吧,这其中存在着怎样的原因呢? 先看看网友是怎么吐槽的&#x…

程序员们,你会考虑使用中文编程吗?

众所周知,编程语言有一条无形的“鄙视链”。 Java和C#相互不服,并且看不起写Python的,Python看不起PHP,PHP看不起前端。而中文编程就在这个语言“鄙视链”的底端艰难生存。 有人对中文编程嗤之以鼻,相比于“人生苦短…

为什么大学还在教过时的软件技术,程序员:只能说你根本不懂软件

这几天小编一个刚毕业的学弟来向我取经,也抱怨了一些自己入职后工作上的事情。其中“为什么大学教的都是一些过时的软件技术,比如JSP,工作之前还要从头学习新的技术”这个问题让我特别有感触。按理说作为计算机科学来说,优势就在于…