【qt信号槽-5】信号槽相关注意事项记录

背景:

信号槽是qt很重要的概念,遇到问题帮助没少看。其中就有signals and slots这一章节,说得很到位。

概念琐碎,记录备忘。不对之处望指正。

【qt信号槽-1】槽函数重写问题,qt_metacall和qt_static_metacall-CSDN博客

【qt信号槽-2】Qt中窗体继承,槽响应多次执行的解决_qt 窗口继承-CSDN博客

【qt信号槽-3】(QObject::connect: No such slot)的一种解决方法,connect函数qt4/qt5格式,元数据注册_qt元数据注册-CSDN博客

【qt信号槽-4】槽函数不响应不执行的一种原因:ui提升导致重名-CSDN博客

用途:

信号槽主要用于各种程序之间的通讯。

比如微软的控件的消息事件响应机制,在qt中就是信号槽。消息就是信号,事件就是槽。

比如对象之间的通信,哪怕不在一个线程。它是线程安全的。但我觉得,信号槽本身安全,但用它干的具体事是否安全还得看程序员。

效率:

本质就是函数回调,但比直接调函数慢十倍。

连接:

先不说unique,connect一次就建立一个连接。

可以多对多。亦即:一个信号连多个槽,或者多个信号连一个槽。

槽的执行顺序和连接建立的顺序一样,先连哪个就先执行哪个。

槽执行时机:

因为本质就是函数调用,所以只要不是queue连接方式,就是顺序执行,一emit,就slot。

如果是queue方式,按队列走,涉及事件循环,那得看线程相关的概念。下面贴出以前的博客连接,以便翻阅。

【Qt线程-1】this,volatile,exec(),moveToThread()_qt线程exec-CSDN博客

【Qt线程-2】事件循环(QCoreApplication::processEvents,exec)的应用-CSDN博客

【Qt线程-3】使用事件循环,信号,stop变量,sleep阻塞,QWaitCondition+QMutex条件变量,退出子线程工作_qt阻塞线程-CSDN博客

【Qt线程-4】事件循环嵌套,BlockingQueuedConnection与QWaitCondition比较-CSDN博客

【Qt线程-5】生产者&消费者模型应用(多态,子线程控制,协同,事件循环)_qt生产者消费者模型-CSDN博客

【Qt线程-6】获取当前线程id,thread()和currentThreadId(),不是想当然那样,不使用信号槽可能看不出区别_qt 获取线程id-CSDN博客

连接方式:

就是connect函数最后一个参数,网上太多文章。以手册为准。

Qt::AutoConnection

自动模式,sender和receiver在同线程就DirectConnection,跨线程就QueuedConnection。

Qt::DirectConnection

直连模式,相当于顺序执行,发完信号紧跟着槽就执行。主要用于sender和receiver在同线程。

Qt::QueuedConnection

队列方式,槽函数执行不一定是在发完信号之后,基于事件循环,按队列走。具体还是看线程相关。

Qt::BlockingQueuedConnection

阻塞队列方式,在队列模式基础上,具备direct方式的特征,顺序执行,唯一不同的就是跨了线程。

Qt::UniqueConnection

唯一连接,跟数据库的unique一样,就是唯一,个人认为是烂人做法,比如不用考虑connect的重复性,方便了编程。

注意事项:

返回值:

信号槽之间可以有返回值,毕竟本质上是函数调用,所以肯定行。当然真能是顺序执行的情况下。队列模式下得不到返回值。网上有很多文章说明用法,但手册明确说明如下:

They can never have return types (i.e. use void).

个人认为,就不要那样用。

直连和阻塞队列:

就是connect第五个参数,direct和blockingqueue方式都是顺序执行。有些时候可以无视,只要线程安全一样用。但我的看法是,一定要遵循qt的思想,不乱用。不该跨线程的代码,不要让它direct方式跨过去,就用blocking。这一点,还是推荐看线程相关。

槽函数重写:

跟moc有关,槽函数重新默认是从基类开始执行槽函数的,也就是不需要显式调用。

自定义参数:

需要元数据注册。

界面提升:

ui通过提升方式,发生嵌套时,控件名一样不能重复,否则槽冲突。

结束:

其它问题想到可以不断补充。相关可以看其它博客。

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

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

相关文章

【数据结构】并查集的简单实现,合并,查找(C++)

文章目录 前言举例: 一、1.构造函数2.查找元素属于哪个集合FindRoot3.将两个集合归并成一个集合Union4.查找集合数量SetCount 二、源码 前言 需要将n个不同的元素划分成一些不相交的集合。开始时,每个元素自成一个单元素集合,然后按一定的规…

交叉验证之KFold和StratifiedKFold的使用(附案例实战)

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

文件操作学习总结

磁盘上的⽂件是⽂件。 但是在程序设计中,我们⼀般谈的⽂件有两种: 程序⽂件、数据⽂件 (从⽂件功能的⻆度来分类 的)。 程序⽂件 : 程序⽂件包括源 程序⽂件(后缀为.c) , ⽬标⽂件&#xff0…

Opencv入门四(宽高为原始图像的一半)

代码如下&#xff1a; #include <opencv2/opencv.hpp> int main(int argc, char** argv) { cv::Mat img1, img2; cv::namedWindow("Example1", cv::WINDOW_AUTOSIZE); cv::namedWindow("Example2", cv::WINDOW_AUTOSIZE); img1 cv…

Mac如何搭建本地服务器

苹果电脑Mac OS X系统自带了Apache服务器 打开终端 //开启apache&#xff1a;sudo apachectl start //重启apache&#xff1a;sudo apachectl restart //关闭apache&#xff1a;sudo apachectl stop在浏览器输入127.0.10.1 &#xff0c; 如果页面出现 it works&#xff0c;则…

【LeetCode刷题笔记(12-1)】【Python】【有效的字母异位词】【排序/字符统计】【简单】

文章目录 引言有效的字母异位词题目描述提示 解决方案1&#xff1a;【排序】解决方案2&#xff1a;【字符统计】结束语 有效的字母异位词 引言 编写通过所有测试案例的代码并不简单&#xff0c;通常需要深思熟虑和理性分析。虽然这些代码能够通过所有的测试案例&#xff0c;但…

vcomp140.dll丢失怎么办,vcomp140.dll丢失解决方法详解

在我多年的电脑使用经历中&#xff0c;我曾经遇到过一个非常棘手的问题&#xff0c;那就是vcomp140.dll丢失。这个问题让我苦恼了很久&#xff0c;但最终我还是找到了解决方法。今天&#xff0c;我想和大家分享一下我的经历&#xff0c;以及vcomp140.dll是什么&#xff0c;它丢…

【开源软件】最好的开源软件-2023-第四名 vaadin

自我介绍 做一个简单介绍&#xff0c;酒架年近48 &#xff0c;有20多年IT工作经历&#xff0c;目前在一家500强做企业架构&#xff0e;因为工作需要&#xff0c;另外也因为兴趣涉猎比较广&#xff0c;为了自己学习建立了三个博客&#xff0c;分别是【全球IT瞭望】&#xff0c;【…

VR全景技术在政务服务中有哪些应用,为政务服务带来什么便利

引言&#xff1a; 随着科技的不断发展&#xff0c;虚拟现实&#xff08;VR&#xff09;全景技术正逐渐成为政务服务领域的一项重要工具。其独特的沉浸式体验为政务服务带来了全新的便利&#xff0c;提升了公众参与的积极性。 一、VR全景技术在政务服务中的应用 1.虚拟实景政务…

VUE实现购物商城网站前端源码

文章目录 1.设计来源1.1 登录注册页面1.2 主界面1.3 列表界面1.4 详细界面1.5 购物车界面 2.源码2.1源码目录结构2.2源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/135054910 VUE实现购物商城网站前端源码&…

[CVPR-23] PointAvatar: Deformable Point-based Head Avatars from Videos

[paper | code | proj] 本文的形变方法被成为&#xff1a;Forward DeformationPointAvatar基于点云表征动态场景。目标是根据给定的一段单目相机视频&#xff0c;重建目标的数字人&#xff0c;并且数字人可驱动&#xff1b;通过标定空间&#xff08;canonical space&#xff09…

网络编程day5

作业 1> 使用select完成TCP客户端程序 //client #include<myhead.h> #define CLINET_IP "192.168.125.79" #define CLINET_PORT 9999 #define SERVE_IP "192.168.125.79" #define SERVE_PORT 8888 int main(int argc, const char *argv[]) {/…