QT信号与槽机制解析

2023-11-17

信号(Signal)与槽(Slot)是Qt编程的基础。有了信号与槽的编程机制,在Qt中处理界面各个组件的交互操作时变得更加直观和简单。

GUI程序设计的主要内容就是对界面上各组件的信号的响应,只需要知道什么情况下发射哪些信号,合理地去响应和处理这些信号就可以了。


信号(Signal)就是在特定情况下被发射的事件,例如:一个PushButton最常见的信号就是鼠标单击时发射的clicked()信号。

槽(Slot)就是对信号响应的函数。说白了槽就是一个函数,与一般的C++函数是一样的,可以定义在类的任何部分(public、private或protected),可以具有任何参数,也可以被直接调用。

不同:槽函数可以与一个信号关联,当信号被发射时,关联的槽函数被自动执行。

信号与槽关联是用QObject::connect()函数实现的,其基本格式是:

QObject::connect(sender,SIGNAL(signal()),receiver,SLOT(slot()));

connect()是QObject类的一个静态函数,而QObject是所有Qt类的基类,在实际调用时可以忽略前面的限定符,所以可以直接写为:

connect(sender,SIGNAL(signal()),receiver,SLOT(slot()));

具体说明如下:

1、sender是发射信号的对象的名称。

2、signal()是信号名称。信号可以看做是特殊的函数,需要带括号,有参数时还需要指明参数。

3、receiver是接收信号的对象名称。

4、slot()是槽函数的名称,需要带括号,有参数时还需要指明参数。

5、SIGNAL和SLOT是Qt的宏,用于指明信号和槽,并将它们的参数转换为相应的字符串。

 

例:

QObject::connect(btnClose,SIGNAL(clicked()),Widget,SLOT(close()));

其作用就是将btnClose按钮的clicked()信号与窗体(Widget)的槽函数close()相关联,这样,当单击btnClose按钮(就是界面上的“Close”按钮)时,就会执行Widget的close()槽函数。

信号与槽的使用规则:

1、一个信号可以连接多个槽

例如:

connect(spinNum,SIGNAL(valueChanged(int)),this,SLOT(addFun(int));
connect(spinNum,SIGNAL(valueChanged(int)),this,SLOT(updateStatus(int));

具体说明如下:

.这是当一个对象spinNum的数值发生变化时,所在窗体有两个槽进行响应,一个addFun()用于计算,一个updateStatus()用于更新状态。
.当一个信号与多个槽函数关联时,槽函数按照建立连接时的顺序依次执行。
.当信号和槽函数带有参数时,在connect()函数里,要写明参数的类型,但可以不写参数名称。

 

2、多个信号可以连接同一个槽,例如让三个选择颜色的RadioButton的clicked()信号关联到相同的一个自定义槽函数setTextFontColor()。

connect(ui->rBtnBlue,SIGNAL(clicked()),this,SLOT(setTextFontColor()));
connect(ui->rBtnRed,SIGNAL(clicked()),this,SLOT(setTextFontColor()));
connect(ui->rBtnBlack,SIGNAL(clicked()),this,SLOT(setTextFontColor()));

这样,当任何一个RadioButton被单击时,都会执行setTextFontColor()函数。

 

3、一个信号可以连接另外一个信号,例如:

connect(spinNum,SIGNAL(valueChanged(int)),this,SIGNAL(refreshInfo(int));

这样,当一个信号(valueChanged)发射时,也会发射另外一个信号(refreshInfo),实现某些特殊的功能。

 

信号与槽使用注意事项:

1、严格的情况下,信号与槽的参数个数和类型需要一致,至少信号的参数不能少于槽的参数。如果不匹配,会出现编译错误或运行错误。

2、在使用信号与槽的类中,必须在类的定义中加入宏Q_OBJECT。

3、当一个信号被发射时,与其关联的槽函数通常被立即执行,就像正常调用一个函数一样。只有当信号关联的所有槽函数执行完毕后,才会执行发射信号处后面的代码。
4、信号与槽机制是QtGUI编程的基础,使用信号与槽机制可以比较容易地将信号与响应代码关联起来。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QT信号与槽机制解析 的相关文章

  • SLIP, PPP, L2F ,PPTP, L2TP的简介以及关联

    都是网络连接的方式 其中又分为两大类 拨号连接 dialup 和虚拟私人网络 virtual private network 俗称VPN 依旧用我的浅薄而又粗俗的言语来向大家解释一下 如有错误 尽情打脸 拨号连接 Dalup 包含两种连接方
  • Tim定时器学习打卡

    通用定时器 TIM2 TIM3 TIM4和TIM5 1 主要功能 16位向上 向下 向上 向下自动装载计数器 16位可编程 可以实时修改 预分频器 计数器时钟频率的分频系数为1 65536之间的任意 数值 4个独立通道 输入捕获通道 输出比
  • 【Sql语句】创建表、修改、删除表,增添列、删除列

    编写以下语句 1 创建dept表 2 创建emp表 3 将列Last name的长度增加到50 4 根据表emp创建employees2 5 删除表employees2 6 在表dept和emp中添加新列test column 并检查所作的
  • Windows桌面文件夹删除被提示“找不到该项目”——顽固目录、文件的删除

    注意 若转载 请贴上链接 https blog csdn net qq 41042595 article details 112576438 如若发现抄袭或未标明来源现象 都可举报反馈 文章目录 问题来源场景 原因分析 解决方案 步骤一 1
  • Java创建文件和文件夹

    创建文件和文件夹 有异常 抛出或捕获IOException 如果文件 文件夹 存在则不创建 也不会覆盖文件中的内容 createNewFile 方法创建一个普通文件 使用mkdir 方法创建一个文件夹 使用mkdirs 方法创建多级文件夹
  • Android不同版本SD卡存储权限解决

    1 Android6 0之前 6 0之前是不需要动态申请权限的 直接在manifest中申请即可以正常使用
  • gulp基础:gulptask

    var gulp require gulp var browserify require gulp browserify 模块化的打包 var uglify require gulp uglify js的压缩 var webserver r
  • Mysql设计学生宿舍管理系统+考勤系统

    一 学生宿舍管理系统 要求 学校宿舍管理系统 要求包含宿舍信息 学生信息 每日的宿舍查房记录 分析 学生与宿舍的关系 m 1 宿舍的查房记录是根据宿舍来查的 与宿舍有关系 一个宿舍可以多次查房 宿舍与查房记录是1 m的关系 宿舍信息表 cr
  • 浅谈什么是大数据

    浅谈什么是大数据 有人可能发现了 我这个专栏写的就是大数据 所以我们一起来谈谈大数据 大数据概念 百度百科 对于 大数据 Big data 研究机构Gartner给出了这样的定义 大数据 是需要新处理模式才能具有更强的决策力 洞察发现力和流
  • 基于BCM53262交换芯片平台的Linux操作系统移植(一)编译环境

    2018 05 10 09 26 zhoulinhua 2018 05 10 一 源码 相关链接 http www at91 com linux4sam bin view Linux4SAM 1 a91bootstrap源码获取 git c
  • C++ 外观模式

    include
  • redhat 6.4安装oracle11g RAC (四)

    创建集群数据库 在节点rac1上用oracle用户执行dbca创建RAC数据库 root rac1 su oracle oracle rac1 dbca 选择创建数据库 自定义数据库 也可以是通用 配置类型选择Admin Managed 输
  • 微信小程序使用npm安装包

    小程序现在支持直接通过npm安装包了 点击这里了解更多 记录一下我自己的安装步骤及安装过程中遇到的一些问题 希望能够帮助到正在阅读此篇文章的你 我就直接通过在项目根目录安装miniprogram datepicker做演示了 1 在项目根目
  • SIMD优化之ARM纯汇编开发

    ARM纯汇编开发 注 这篇文章是两年前写的 现在更新到CSDN 当时认知不足 其中可能有不少错误 敬请行家指正 为什么要用纯汇编 开发效率高 这里可能让很多人大跌眼镜了 纯汇编开发效率高 首先 这个是有限定条件的 需要反复调优的重度运算场景
  • selenium读取excel中的数据实现自动登录

    一 当用selenium实现自动登录时 测试不同账号的登录 1 可以写一个登录方法login driver username password 对每一个账号分别写一个方法test zhnagshan log 然后将数据传入到登录方法logi
  • 【自动驾驶技术】优达学城无人驾驶工程师学习笔记(六)——Github与Markdown相关教程

    Github与Markdown相关教程 本博文为笔者关于优达学城无人驾驶工程师课程中计算机视觉基础部分的学习笔记 该部分为实现车道线图像识别功能的基础课程 关于本课程的详细说明请参考优达学城官网 优达学城为学员提供了一个简短的Github教
  • C++编程入门--矩阵类重载运算符

    题目 定义3 3矩阵类Matrix 在其中重载运算符 实现矩阵的基本运算 首先 我们先确定这个矩阵类的基本功能 我们来声明其成员函数的功能 列出来如下 include
  • SQLi LABS Less-21

    第21关使用POST请求提交参数 对用户名和密码中的特殊字符进行了转译 难度较大 21关的突破口在cookie 用户登录成功后 将用户名进行base64加密后 保存在cookie中 点击提交按钮的时候 会从cookie中获取保存的用户名 使

随机推荐

  • 矩阵 矩阵的基本运算规则 行列式 逆矩阵

    矩阵 本质 矩阵是个数表 从线性变换的视角看 矩阵是记录线性变换这一过程的描述信息 记为 A m n A m times n Am n 或 A a i j A a ij A aij 或 A a i j m n A a ij m times
  • RSA加密长度限制问题解决 BadPaddingException

    Exception in thread main javax crypto BadPaddingException Decryption error at sun security rsa RSAPadding unpadV15 RSAPa
  • python爬取数据存入excel_将爬取的数据保存到Excel表格

    第一步 导入模块 import xlwt 导入写入excel需要的包 第二步 定义函数 将爬取好的数据保存到excel文件中 下面以保存python的关键词为例 介绍详细流程 def write to excel filename lst
  • 蓝牙-基础篇-蓝牙简介

    文章目录 蓝牙特点 蓝牙功能 蓝牙的两种技术 蓝牙特点 低功耗 短距离 跨设备 蓝牙功能 跨设备传输流式音频 跨设备传输数据 广播信息 蓝牙的两种技术 传统蓝牙技术 蓝牙版本2 0 2 1 即Basic Rate Enhanced Data
  • 【小沐学C#】C#逆向反编译工具:JetBrains dotPeek

    论道篇 一天 戈戈来到江边静坐凝思 一手放着风筝 一手钓着鱼 微风徐徐 水面粼粼 柳枝招摇 戈戈 论语 读了许多天可有心得 狄狄 错误要么是 过了 要么是 不及 重要的就是把握住度 戈戈 程朱理学常说格物致知 那些红绿线平时可格出了些什么
  • C语言程序设计 程序设计与C语言

    1 计算机与程序 程序设计语言 机器语言又称低级语言 意思是贴近计算机硬件的语言 是一个型号机器语言的指令的集合 是紧密依赖于计算机的硬件 高级语言用于程序设计 编译系统的软件事先把高级语言编写的程序翻译成机器语言程序 2 C语言的出现和发
  • three.js 内置的几何体Geometry

    案例效果 所有案例效果地址 前言 前面我们了解了 一个three js三大基础renderer camera scene和响应式three js 现在我们来学习一下three js内置的geometry three js提供了很多的几何体给
  • 【PTA】二维数组转置

    写一个程序 使给定的一个二维数组 n n 转置 即行列互换 输入格式 输入n表示n行n列 再输入一个nxn的矩阵的整数 输出格式 转置的结果 输入样例 3 1 2 3 4 5 6 7 8 9 输出样例 1 4 7 2 5 8 3 6 9
  • 1007 素数对猜想

    让我们定义dn为 dn pn 1 pn 其中p是第i个素数 显然有d1 1 且对于n gt 1有dn 是偶数 素数对猜想 认为 存在无穷多对相邻且差为2的素数 现给定任意正整数N lt 10 5 请计算不超过N的满足猜想的素数对的个数 输入
  • 嵌入式的七种接口

    我们将简要介绍七个串行接口 SIO UART SSP SPI I2C CAN USB和EtherMAC 虽然每个接口都有几个不同的操作模式 但我们只介绍一个典型的模式 因此 本文的解释不适用于其它操作模式 摘自东芝 SIO 串行输入输出 最
  • Nginx使用多个.conf文件配置虚拟主机server

    使用 Nginx 配置多个虚拟机 server 服务 通常做法可以直接在 nginx conf 文件中添加即可 如下事例 nginx conf worker processes 1 events worker connections 102
  • Eva 剧情解析

    Eva 剧情解析 来源 https zhuanlan zhihu com p 20864898 0 写在前面的话 相信和我年龄差不多的小伙伴们对 新世纪福音战士 Neon Genesis Evangelion 以下简称 EVA 一定不陌生
  • 动画中英文对照表(09.24)

    ID 英语名 中文名 作者 日语名1 hack Legend of Twilight s Bracelet hack 黄昏的腕轮传说 2 hack Liminality in case of AIHARA Yuki hack OVA版 3
  • 【分类模型评价】宏平均(macro avg)、微平均(micro avg)和加权平均(weighted avg)

    当我们使用 sklearn metric classification report 工具对模型的测试结果进行评价时 会输出如下结果 对于 精准率 precision 召回率 recall f1 score 他们的计算方法很多地方都有介绍
  • Scratch中的坐标系

    Scratch中的坐标系即普通的平面坐标系 其中水平方向为x轴 竖直方向为y轴 x轴与y轴交点为 0 0 点 x轴正方向为水平向右 y轴正方向为竖直向上 舞台默认大小为宽480 高360 其中x轴范围是 240 240 y轴范围是 180
  • 该产品与此版 VMware Workstation 不兼容,因此无法使用

    目录 VMware虚拟机开机报错 解决错误 VMware虚拟机开机报错 配置文件 D Users tyn Documents Virtual Machines Ubuntu16 的克隆 Ubuntu16 的克隆 vmx 是由 VMware
  • intellij idea开发环境下使用jetty跑项目修改js、jsp文件提示Cannot Save Files 问题

    问题描述如题 试了好久终于找到解决办法 记录下来与大家分享 1 首先进入你的maven仓库找到jetty的位置 我的位置在 C Users ccpit m2 repository org mortbay 供大家参考 2 进入jetty目录
  • DrawerLayout+ToolBar

    ToolBar自定义图标 关联DrawerLayout http blog csdn net static zh article details 52621240 Android侧滑菜单DrawerLayout的使用 http blog c
  • (休息几天)读曼昆之微观经济学——供给需求和政府政策

    1价格上限的短期效应和长期效应 价格上限的一个常见例子是租金管制 在很多城市 当地政府部门规定了房东对租房者索要的最高价格上限 该政策的目的是帮助穷人能租得起房子 经济学家通常痛批租金管制政策 认为它是一种非常缺乏效率的帮助穷人提高他们生活
  • QT信号与槽机制解析

    信号 Signal 与槽 Slot 是Qt编程的基础 有了信号与槽的编程机制 在Qt中处理界面各个组件的交互操作时变得更加直观和简单 GUI程序设计的主要内容就是对界面上各组件的信号的响应 只需要知道什么情况下发射哪些信号 合理地去响应和处