【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通过提升方式,发生嵌套时,控件名一样不能重复,否则槽冲突。

结束:

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

12.19力扣

1901. 寻找峰值 II 题目描述:   一个 2D 网格中的 峰值 是指那些 严格大于 其相邻格子(上、下、左、右)的元素。   给你一个 从 0 开始编号 的 m x n 矩阵 mat ,其中任意两个相邻格子的值都 不相同 。找出 任意一个 峰值 mat[i][j] 并 返回其位置 […

docker-compose部署容器可视化管理平台portainer

一、安装docker docker--安装docker-ce-CSDN博客 二、安装docker-compose 安装docker-compose-CSDN博客 三、docker-compose部署portainer yml文件,需要开放9000端口 [rootlgb /]# vi /opt/docker-compose-yml/portainer/docker-compose.yml version: "…

基于JAVA的海南旅游景点推荐系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户端2.2 管理员端 三、系统展示四、核心代码4.1 随机景点推荐4.2 景点评价4.3 协同推荐算法4.4 网站登录4.5 查询景点美食 五、免责说明 一、摘要 1.1 项目介绍 基于VueSpringBootMySQL的海南旅游推荐系统&#xff…

jmeter的插件安装以及监控环境使用

1.插件包 下载一个插件管理包jmeter-plugins-manager版本.jar,放到jmeter的lib/ext目录下。 。 重启jmeter,那么就有了插件管理 把JMeterPlugins-Extras.jar和JMeterPlugins-Standard.jar包放进lib/ext目录下 jmeter-plugins-manager-1.4.jar包以及JMe…

2017年第六届数学建模国际赛小美赛C题如何打击人口贩运解题全过程文档及程序

2017年第六届数学建模国际赛小美赛 C题 如何打击人口贩运 原题再现: 7月30日是联合国打击贩卖人口世界日,这一天的重点是结束利用儿童、妇女和男子从事强迫劳动或性工作的犯罪行为。全世界有2700万至4580万人陷于某种形式的现代奴役之中。受害者被迫成…

Unity学习笔记(零基础到就业)|Chapter01:C#入门

Unity学习笔记(零基础到就业)|Chapter01:C#入门 前言一、控制台输入输出语句二、初识变量1.一些好用的tips2.变量声明的固定写法3.变量类型 三、变量的本质1.变量的存储空间2.变量的本质:2进制 四、变量的命名规范1.必须遵守的规则…

Java 队列(Queue)简介与经典例子

Java 队列(Queue)简介与经典例子 队列(Queue)是一种常见的数据结构,它按照先进先出(FIFO)的原则管理元素。在Java中,队列是一种广泛使用的数据结构,用于处理多种实际问题…

比 style gan 更好的 style gan2

上一篇博客介绍了style gan 原理,但是 style gan 的结果会有水珠伪影,作者实验后发现是 Adain 导致的,AdaIN对每一个feature map的通道进行归一化,这样可能破坏掉feature之间的信息。当然实验证明发现,去除AdaIN的归一…

连接SSH报错 / 连接容器SSH

连接SSH报错 / 连接容器SSH 前言被控端主控端连接失败 前言 本文介绍如何通过SSH方式远程连接Linux被控端,并介绍如何解决连接失败问题。 此方法同样适用于SSH连接Docker容器。 被控端 被控端一般为Linux,默认已安装ssh,但需要手动安装ope…

复杂 SQL 实现分组分情况分页查询

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、根据 camp_status 字段分为 6 种情况 1.1 SQL语句 1.2 SQL解释 二、分页 SQL 实现 2.1 SQL语句 2.2 根据 camp_type 区分返…

[Verilog] Verilog 数据类型

主页: 元存储博客 文章目录 前言1. bit 类型2. reg 类型3 wire类型4 integer类型5 real类型6 parameter类型7 enum类型8 array 类型9 向量类型10 time 类型11 string 类型 前言 在 Verilog 中,有几种不同的数据类型可以用于声明和操作变量。 在 Verilo…

【python】程序运行添加命令行参数argparse模块用法详解

Python标准库之argparse,详解如何创建一个ArgumentParser对象及使用 一. argparse介绍二. 使用步骤及参数介绍三. 具体使用3.1 设置必需参数3.2 传一个参数3.3 传多个参数3.4 位置参数和可选参数3.5 参数设置默认值3.6 其它用法 一. argparse介绍 很多时候&#xff…

遇见小黄鸭——一年开出两千多家门店,疑似员工维权,拖欠薪资?

遇见小黄鸭 遇见小黄鸭(重庆)食品有限公司成立于2021年10月12日,注册地位于重庆市渝中区 法定代表人为袁林 实际隶属于重庆中润天泽科技(集团)有限公司 实体业崛起? 经过三年疫情的冲刷,实体…

亚信安慧AntDB:支撑中国广电5G业务的数据库之力

自2019年6月获得5G牌照以来,中国广电积极利用700MHz频谱资源,迅速崛起为第四大运营商,标志着其在数字通信领域取得的巨大成就。通过与中国移动紧密合作,共建共享基站已超过400万座,为实现自主运营和差异化竞争提供了坚…

游戏引擎?

游戏引擎是指一些已编写好的可编辑电脑游戏系统或者一些交互式实时图像应用程序的核心组件。这些系统为游戏设计者提供各种编写游戏所需的各种工具,其目的在于让游戏设计者能容易和快速地做出游戏程式而不用由零开始。大部分都支持多种操作平台,如Linux、…

【诊断】linux系统下的内存溢出问题定位

步骤: (1)编写并运行一个会造成内存溢出的代码: import java.util.HashMap; import java.util.concurrent.atomic.AtomicInteger;public class HeapLeakTest {static AtomicInteger i new AtomicInteger(1);public static void …

202. 快乐数(快慢指针)

对于任意n,可能出现以下几种情况: 最终会得到 1。 最终会进入循环。 值会越来越大,最后接近无穷大。 对于第三种情况,我们可以简单的列举一下: 会发现,13位数字的数位平方和最大是1053,1…

LeetCode刷题--- 子集

个人主页:元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题【 http://t.csdnimg.cn/yUl2I 】【C】 【 http://t.csdnimg.cn/6AbpV 】数据结构与算法【 http://t.csdnimg.cn/hKh2l 】 前言:这个专栏主要讲…

多对多关系通用操作组件,省时省力的神器

项目上有很多对多操作的场景,建对象,建mapper接口,设置查询条件,查询多对多数据等都是一项极为耗时耗力的工作。因此,搓了这款集建表-保存-查询-设置条件等操作于一体的组件。原理简单,利用$标签动态作些操…

25.BFD双向转发检查

BFD双向转发检查 链路故障检测工具,结合三层协议使故障检测更加快速 例如两台路由器之间加了一台二层设备 在修改优先级后,默认选择了下面那条优先级高的路由,R1 ping R2的时候是正常能ping通的 但是,当下面的路由出现故障后&a…