1.带参数的信号和槽
Qt的信号与槽也支持带有参数,同时也可以支持重载
此处我们要求,信号函数的参数列表要和对应连接的槽函数参数列表一致
此时信号触发,调用到槽函数的时候,信号函数中的实参就能够被传递到槽函数的形参中
示例1:重载信号槽
(1) 在“Widget.h”头文件中声明重载的信号函数以及重载的槽函数如下图所示
(2) 在“Widget.cpp”文件实现重载函数以及连接信号和槽
这里一开始我是直接直接连接信号和槽的如下图,直接报错说没有匹配的函数来调用,其实这里我个人的理解就是函数重载,如果直接连接信号和槽就算我们发射的信号是带参数的也没有办法确定要调用的是哪个槽函数,所以会报错,我们通过函数指针的方式指明参数就可以明确当发射带参数的信号时需要调用的槽函数。
(3)执行结果如下
示例2:信号槽参数列表匹配规则
(1)在“Widget.h”头文件中声明信号和槽函数
(2) 在“Widget.cpp”文件中实现槽函数以及连接信号和槽
注意:信号的参数可以多于槽函数的参数个数,但是槽的参数个数不能多于信号参数个数,但是实际开发中最好还是保持参数个数也能匹配一致
2.信号与槽的连接方式
2.1 一对一
主要有两种形式,分别是:一个信号连接一个槽 和 一个信号连接一个信号
(1)一个信号连接一个槽
示例:
1.在“widget.h”中声明信号和槽以及信号发射函数
2.在“widget.cpp”中实现槽函数,信号发射函数以及连接信号和槽
(2)一个信号连接另一个信号
示例:在上述示例的基础上,在“widget.cpp”文件中添加如下代码
2.2 一对多
一个信号多个槽
示例:
(1)在 "widget.h" 头⽂件中声明⼀个信号和三个槽;
(2)在 "widget.cpp" ⽂件中实现槽函数以及连接信号和槽;
2.3 多对一
多个信号连接一个槽函数
示例:
(1)在 "widget.h" 头⽂件中声明两个信号以及⼀个槽;
(2)在 "widget.cpp" ⽂件中实现槽函数以及连接信号和槽;
3.信号和槽的其他说明
3.1 信号和槽的断开
使用disconnect即可完成断开。
disconnect的用法和connect基本一致
示例:
3.2 使用Lambda表达式定义槽函数
[ capture ] ( params ) opt -> ret {
Function body;
};


3.3信号与槽的优缺点
