1:信号连接信号
2:一个信号连接多个槽函数
3:多个信号可以连接同一个槽函数
4:信号和槽的参数类型必须一一对应
5:信号的参数个数可以多于槽函数,反之不可以,相同个数的参数类型要一一对应
6:可以利用disconnect断开信号槽的连接
案例:按钮点击触发老师饿了的信号,执行学生请客吃饭槽函数
#include "widget.h"
#include "QPushButton"
//Teacher老师类 Student 学生类
//下课,老师发送饿了的信号,学生响应信号,请老师吃饭
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
//加this则不需要手动delete
this->zt = new Teacher(this);
this->st = new Student(this);
// 连接信号和槽
// connect(this->zt,&Teacher::hungry,this->st,&Student::treat);
//连接有参的信号和槽
//函数指针 指向 函数地址
// void (Teacher:: * teacherSignal)(QString) = &Teacher::hungry;
// void (Student:: *studentSlot)(QString) = &Student::treat;
// connect(this->zt,teacherSignal,this->st,studentSlot);
QPushButton *btn = new QPushButton;
btn->setParent(this);
btn->setText("下课");
//点击下课出发信号
void (Teacher:: * teacherSignal2)() = &Teacher::hungry;
void (Student:: *studentSlot2)() = &Student::treat;
connect(this->zt,teacherSignal2,this->st,studentSlot2);
//信号和槽扩展
//1:信号连接信号
//2:一个信号连接多个槽函数
//3:多个信号可以连接同一个槽函数
//4:信号和槽的参数类型必须一一对应
//5:信号的参数个数可以多于槽函数,反之不可以,相同个数的参数类型要一一对应
//6:可以利用disconnect断开信号槽的连接
connect(btn,&QPushButton::clicked,this->zt,teacherSignal2);
//断开连接
//disconnect(btn,&QPushButton::clicked,this->zt,teacherSignal2);
//下课函数调用
// classOver();
}
void Widget::classOver(){
//触发自定义信号
emit this->zt->hungry();
//触发有参信号
emit this->zt->hungry("宫保鸡丁");
}
Widget::~Widget()
{
}