Qt私有信号实现(private signal)

news2024/10/3 0:34:02

在使用Qt信号槽机制的时候,有时候我们需要一个信号只能由类内发出,而不允许使用该类对象的用户发出,此时就需要私有信号的支持,而信号的关键字 signals,点进去它的实现,大概如下:

signals:

在这里插入图片描述
再次点进去:
在这里插入图片描述
继续:
在这里插入图片描述
可以看到,无论你使用 private 也好,protected也好,最后预处理宏展开的时候都会被加上 public,想使用私有信号需要一点小技巧;

方法一:使用 QPrivateData 作为信号参数占位

signals:
    void privateSignal(QPrivateSignal);

QPrivateSignal类型,被声明在 Q_OBJECT 宏中,是一个私有的空数据类型,使用QPrivateSignal作为参数,由于它是私有的,所以外部使用这个信号的时候,无法调用这个私有类型,实现了私有信号;另一方面,槽函数连接的时候,参数可以被忽略,这样用户连接这个信号的时候不受影响;(你也可以自己定义一个私有的类型,作为信号参数,实现私有信号)
在这里插入图片描述


方法二:标记 Q_SIGNAL

private:
    Q_SIGNAL void privateSignal();

Q_SIGNAL宏,在旧的Qt版本中用于信号的声明,Qt5之后不再推荐使用,在此使用这个宏强行声明信号,也可以实现私有信号;与上面一种方法不同的是,这里没有使用 signals 关键字标识以下声明为信号,但是使用了 private 关键字标识了私有权限,在语义方面,各有优劣;这种方法还有一个不太灵活的地方:用户无法连接此信号,因为private关键字限定了它;这个用法,适用于信号只在类内部使用的情况。

两种方法无法评价优劣,应在合适的场景选择合适的实现。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

推荐-25个开源软件

今天,我想让您对下一个 25 个出色的开源软件。您可以安装它,并且几乎开箱即用! ⚠️使用软件前请检查是否安全️️ 1. Portmaster (Go) — 隐私保护者 Portmaster 由 Safing 开发,是一款开源软件,可帮助您保护在线活…

PyTorch基础(18)-- torch.stack()方法

一、方法详解 首先,看一下stack的直观解释,动词可以简单理解为:把……放成一堆、把……放成一摞。 有了对stack方法的直观感受,接下来,我们正式解析torch.stack方法。 PyTorch torch.stack() method joins (concaten…

cookie过大导致request 400 错误研究

问:get请求太长报400的错误,如何解决?生成系统中经常偶现此问题 问:get请求URL的长度是谁限制的? 问:每一个cookie的value的大小还是同域下cookie的个数做的限制? 现象:出现 400 Ba…

【Android知识笔记】插件化专题(一)

占位式插件化方案 宿主启动插件 Activity 的流程 实现思路: 创建一个 DexClassLoader 类加载其用于加载插件包apk中的 Activity 类 反射调用 AssetManager 的 addAssetPath() 将插件包的路径添加,然后通过该AssetManager的实例构造Resource的实例用以加载插件中的布局 启动…

一个信号间相互干扰问题的发现及解决方法

问题描述:MAX3232串口通讯芯片的输出引脚上存在干扰电平,通过示波器可以看到干扰电平,PC端的串口程序表现为接收到乱码。如下图,环回测试中发了一串字符数据ATCIPSEND后,除了收到环回的ATCIPSEND字符外,还有…

【vue2高德地图api】高德地图forEach批量添加marker点标记,点击获取item对象『全网最详细』【翻遍csdn总结】

系列文章目录 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 系列文章目录前言一、展示地图二、getList获取列表数据三、写入marker标记在页面中1、marker的官方文档2、setMarks方法3 点击事件4 学习心得 总结 前…

Qtcreator 编译C++代码并打包成APK

1:首先需要下载正确的SDK,NDK工具 我们可以使用sdkmanager工具来进行确认,我们当前已经安装了哪些模块 2:撰写自己的CMakeLists.txt 或者 QtCreator可以识别的.pro 文件 使用QtCreator 可以生产默认的.pro 文件,其中的…

ChatGPT 助力英文论文翻译和润色

文章目录 一、前言二、主要内容1. 中英互译2. 中文润色3. 英文润色 三、总结 🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一、前言 随着全球化的推进,跨文化交流变得越来越重要。在学术领域,英文论文的质量对于研究成果的传…

Chapter1:C++概述

此专栏为移动机器人知识体系的 C {\rm C} C基础,基于《深入浅出 C {\rm C} C》(马晓锐)的笔记, g i t e e {\rm gitee} gitee链接: 移动机器人知识体系. 1.C概述 1.1 C概述 计算机系统分为硬件系统和软件系统。 硬件系统:指组成计算机的电子…

C++:二叉搜索树的原理和模拟实现

文章目录 二叉搜索树二叉搜索树的基本实现原理 二叉搜索树的实现非递归版本的实现递归版本的实现 二叉搜索树 二叉搜索树也叫做二叉排序树,可以是空树,也可以是满足一些要求的二叉树 若它的左子树不为空,则左子树上所有节点的值都小于根节点…

关于C2447 “{”: 缺少函数标题(是否是老式的形式表?)

以下两幅图,实际上并没有任何错误。 OR 我从vscode上把代码移植过来,实际并无任何错误。但是因为这个注释,一直在报错,我把所有注释都删了,程序就自然运行了。所以问题出在哪呢?希望大佬解答。

统信UOS技术开放日:四大领域全面接入AI大模型能力

1024是程序员的节日,10月24日,统信举办2023统信UOS技术开放日暨deepin Meetup北京站活动,发布与大模型同行的UOS AI、浏览器AI助手、邮箱AI助手、自然语言全局搜索、畅写在线等多项最新AI技术与产品应用。 统信软件高级副总经理、CTO、深度社…

C语言知识回顾

链接:https://pan.baidu.com/s/1CiB1Ydm4LTV6hZE8wx0VFw?pwdna4z 提取码:na4z --来自百度网盘超级会员V6的分享

【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步

MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步 前提介绍MySQL和ElasticSearch的同步双写优点缺点针对于缺点补充优化方案 MySQL和ElasticSearch的异步双写优点缺点 定时延时写入ElasticSearch数据库机制优点缺点 开源和成熟的数据迁移工具选型Logsta…

arcgis js api FeatureLayer加载时返回数据带*问题

接着这一问题衍生出来的问题 arcgis的MapServer服务查询出来的结果geometry坐标点带*的问题-CSDN博客 个人感觉像是server版本的问题,具体不清楚,pg数据库里面的shape点集合坐标点的精度是8,但是server服务查出来的默认都十几位。所以存在一…

使用达梦数据库的总结

–修改当前会话所在模式: set schema 模式名;–创建表空间、用户名并为用户指定表空间,并为用户授权 create tablespace "RSGL_BZK" datafile REGL_BZK.DBF size 7488 autoextend on next 128 maxsize 33554431 CACHE NORMAL; create user …

制作macOS Ventura U盘启动盘教程

macOS 14更新一段时间了,发现某些应用不适配想要无损降级,如何进行macOS的降级呢,除了备份好的时间机器备份,还需要一个可以引导的macOS U盘安装器,如何制作macOS 13 Ventura 系统启动U盘呢,小编带来对新手…

webGL编程指南 第四章 旋转+平移.TanslatedRotatdTriangle

我会持续更新关于wegl的编程指南中的代码。 当前的代码不会使用书中的缩写,每一步都是会展开写。希望能给后来学习的一些帮助 git代码地址 :git 本篇文章将把旋转和平位移结合起来,因为矩阵的不存在交换法则 文章中设计的矩阵地址在这里​…

苹果cms模板MXone V10.6魔改版网站源码短视大气海报样式

安装模板教程说明: 1、将模板压缩包上传到苹果cms程序/template下解压 2、网站板选择mxone 模板目录填写html 3、网站模板选择好之后一定要先访问前台,然后再进入后台设置 4、主题后台地址: 苹果cms后台点击,自定义菜单配置 …

6.6 Elasticsearch(六)京淘项目改造

文章目录 1.项目准备2.基础配置2.1 添加pom.xml依赖2.2 yml配置es服务器地址列表 3.具体实现3.1 item实体类封装3.2 添加接口3.3 SearchController 4.search.jsp界面4.1 搜索内容展示4.2 高亮内容样式设置4.3 搜索框内容回填4.4 添加上下页按钮 1.项目准备 我们切换回到此前的…