- 信号和槽函数介绍
conncet(sender, signal, receiver, slot)
/*
* 1. 信号发出者;
* 2. 信号;
* 3. 信号接收者;
* 4. 接受到信号执行任务; 槽函数
*/
- 自定义信号和槽函数
场景 :老师饿了,学生请客;
step1: 定义学生类, 老师类;右键新建文件即可;
step2: 在老师类中申请信号,在学生类中申明并实现槽函数;
teacher.h 声明信号, 返回值void, 参数可以存在,仅声明不需要实现,可以重载;
stu.h 声明,在对应.cpp实现
void Stu::treat()
{qDebug()<<"请吃饭";
}
step3: 创建老师对象 学生对象 并连接
step4:触发信号: 老师下课;
信号连接信号
点击按钮的时候发送信号
ui->setupUi(this);QPushButton *button = new QPushButton("点击", this);this->resize(600, 400);this->teacher = new Teacher(this);this->stu = new Stu(this);connect(teacher, &Teacher::hungry, stu, &Stu::treat);connect(button, &QPushButton::clicked, teacher, &Teacher::hungry);
点击的时候就会触发信号;
拓展:重载的信号和槽函数 传参
重新写信号声明 ,带参数;
重新写槽函数申明 及定义 带参数
由于函数重载了,所以需要利用函数指针指向函数地址,然后在做连接;
this->teacher = new Teacher();this->stu = new Stu();void (Teacher::*teachersignal)(QString) = &Teacher::hungry;void (Stu::*stuslot)(QString) = &Stu::treat;connect(teacher, teachersignal, stu, stuslot);// connect(teacher, &Teacher::hungry, stu, &Stu::treat);// connect(button, &QPushButton::clicked, teacher, &Teacher::hungry);classOver();