QT开发第二章——信号和槽

文章目录

信号和槽概念

Qt中用户每和控件交互就是一个事件,每个事件会发送信号,比如点击按钮、关闭窗口,对信号的相应就是槽。

信号的本质

信号是用户对按钮或窗口进行操作,产生了事件,所以信号的本质就是事件,信号的呈现方式是函数,某个事件产生了,Qt会通过特定函数通知使用者。

槽的本质

槽的本质是对信号相应的函数,与信号关联,当信号触发时,自动调用槽函数

信号只需要声明(编译器会自动生成定义,元编程),槽函数需要声明定义

信号与槽使用

连接信号和槽

c 复制代码
connect (const QObject *sender, 
 const char * signal ,
 const QObject * receiver , 
 const char * method , 
 Qt::ConnectionType type = Qt::AutoConnection )

利用QT Creator生成槽代码

头文件自动生成,声明

cpp生成框架,手动添加

自定义信号和槽

老师学生上课关联

带参信号和槽

信号参数个数必须大于等于槽函数参数,但在开发过程中最好个数匹配

信号与槽对应关系

  • 信号与槽一对一
  • 信号对应槽,信号再对应一个信号,比如上面,按钮对应老师,老师对应学生
  • 多个信号对应一个槽
  • 一个信号对应多个槽,多次connect即可

信号与槽断开

disconnect函数

Lambda表达式与槽应用

信号与槽优缺点

优点:低耦合

信号无需关心连接了哪些槽,槽也不需关心关联了哪些信号,支持信号槽机制的类必须继承Object类

缺点:效率较低

与回调函数相比,效率较低,因为需要遍历所有关联,定位信号函数,但人的肉眼其实观察不出来

相关推荐
tachibana22 小时前
与其他语言相比,使用 Go 有什么好处?
开发语言·后端·golang·go
Logic1012 小时前
C语言/数据结构字符串题解:按字符类型重排(数字→字母→符号)——三趟扫描稳定分区
c语言·数据结构·字符串·时间复杂度·计数排序·算法题·ascii
阿俊-全栈开发6 小时前
LikeShop 单商户SaaS商城分销模块二开:佣金计算与结算逻辑实现
java·开发语言·微服务·likeshop·likeshop开源商城·likeshop多商户
weixin_424183618 小时前
开放—封闭原则实战(下):基于策略的流程编排与编译期多态
c++·分布式·系统架构
Logic1018 小时前
C语言/数据结构位运算题解:异或XOR找出学习计划中的“独特学习时间“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
wuminyu9 小时前
C++协程实现接收端的零拷贝Buffer管理原理剖析
java·linux·c语言·jvm·c++
m0_380743879 小时前
C++中的freopen的用法实例详解
开发语言·c++
Escalating_xu10 小时前
【Python】基础语法(1):常量、变量、类型、输入输出与运算符
开发语言·python
jimy110 小时前
polymorph.cpp里面的“析构函数、智能指针”问题
开发语言·c++
m0_3807438710 小时前
PHP 8.3 缓存清除不生效怎么排查
开发语言·php