信号(Signal)和槽(Slot)
传智播客学习视频传送门
- 伪代码描述:
connect(信号的发送者,发生的具体信号,信号的接受者,信号的处理(槽))
eg:
//需求:点击mybtn实现关闭窗口的功能 connect(mybtn,&MyPushButton::clicked,this,&mywidget::close);
断开
disconnect()
QPushButton的Signal函数
继承自QAbstractButton
void clicked(bool checked=false) //点击
void pressed() //按下
void released() //松开
void toggled(bool checked) //一直按着不松开
自定义的信号和槽
自定义信号
-
写在signals下
-
返回值为void,只需要声明
-
可以有参数,可以重载
自定义槽
- 早期版本必须写到public slots下,高级版本可以写到public或者全局下
- 返回值是void 需要声明也需要实现
- 可以有参数可以重载
函数重载冲突
此时需要函数指针指向函数地址
eg:
void(Teacher::*teacherSignal)(QString) = &Teacher::hungry;
void(Student::*studentSignal)(QString) = &Student::treat;
connect(tc,teacherSignal,st,studentSignal);
classIsOver();
拓展
-
信号可以连接信号
-
一个信号可以连接多个槽函数
-
多个信号可以连接一个槽函数
-
信号和槽函数的参数类型必须一一对应
-
信号的参数个数可以多于槽函数的参数个数