Connect
( 信号的发送方,发送的具体信号,信号的接收方,信号的处理(槽))
//参数1 信号的发送者
//参数2 发送的信号(函数的地址)
//参数3 信号的接收方
//参数4 处理的槽函数
//实现点击按钮关闭窗口的功能
connect(mbtn,&QPushButton::clicked,this,&myWidget::close);
信号的 发送端 和 接收端 本身是没有关联的,通过 connect 连接,将两端 耦合 在一起。
返回值 void
需要声明,不需要实现
可以有参数
写到signal下
返回值void
需要声明,需要实现
可以有参数
老版本写到 public slot下,新版本写到 public 或者全局下
Emit 自定义信号
emit zt->hungry();
//创建一个老师对象
this->zt = new Teacher(this);
//创建一个学生对象
this->st = new Student(this);
//老师饿了 学生请客的连接
connect(zt,&Teacher::hungry,st,&Student::treat);
//调用下课函数,触发饿了信号 (先创建好连接,再触发下课这件事)
classIsOver();
void Widget::classIsOver()
{
//下课函数 ,调用后 触发老师饿了信号
emit zt->hungry("宫保鸡丁");
}
利用函数指针 明确指向函数的地址
void(Teacher:: *teacherSignal)(QString) = &Teacher::hungry;
void(Student:: *studentSlot)(QString) = &Student::treat;
connect(zt,teacherSignal,st,studentSlot);
Connect( 信号的发送者,发送的信号 SIGNAL(信号),信号的接受者,槽函数 SLOT(槽函数))
connect(zt,SIGNAL(Teacher::hungry(QString)),st,SLOT(Student::treat(QString)));
//优点:参数直观 缺点:信号的槽对应的参数类型不做检测 (一般不推荐使用)
//QString -> char *
//先转 QByteArray ( .toUtf8() ) 再转成 char * ( .data() )
qDebug()<<"请老师吃饭,老师要吃:"<<foodName.toUtf8().data()<<endl;
信号可以连接信号
//信号连接槽
connect(zt,teacherSignal2,st,studentSlot2); (1)
//信号连接信号
connect(btn,&QPushButton::clicked,zt,teacherSignal2); (2)
断开信号
disconnect(zt,teacherSignal2,st,studentSlot2);