67 lines
2.0 KiB
C++
67 lines
2.0 KiB
C++
#include "widget3.h"
|
||
|
||
Widget3::Widget3(QWidget *parent) : QWidget(parent)
|
||
{
|
||
setWindowTitle("自定义信号和槽");
|
||
resize(800,640);
|
||
|
||
stu = new Student();
|
||
stu->setParent(this);
|
||
|
||
techr = new Teacher(this);
|
||
|
||
// 绑定无参信号
|
||
void(Student:: *sleep1)() = &Student::sleep;
|
||
void(Teacher:: *wakeup1)() = &Teacher::wake_up;
|
||
connect(stu,sleep1,techr,wakeup1);
|
||
|
||
// 绑定有参的信号和槽函数
|
||
void(Student:: *sleep2)(const QString &,int n) = &Student::sleep;
|
||
void(Teacher:: *wakeup2)(const QString &) = &Teacher::wake_up;
|
||
connect(stu,sleep2,techr,wakeup2);
|
||
// 手动发送一个信号
|
||
// emit stu->sleep();
|
||
|
||
// 点击按钮发送学生睡觉的信号
|
||
QPushButton *btn = new QPushButton("我睡会",this);
|
||
btn->resize(120,50);
|
||
btn->move(20,20);
|
||
|
||
QPushButton *btn2 = new QPushButton("再睡会",this);
|
||
btn2->resize(120,50);
|
||
btn2->move(20,90);
|
||
edit = new QLineEdit(this);
|
||
edit->resize(300,50);
|
||
edit->move(20,160);
|
||
|
||
// 将一个信号绑定到另一个信号上,即发送另一个信号
|
||
// connect(btn,&QPushButton::clicked,stu,&Student::sleep);
|
||
// connect(btn,&QPushButton::clicked,this,&Widget3::to_sleep);
|
||
connect(btn, SIGNAL(clicked()) ,this,SLOT(to_sleep())); // QT4 的信号槽写法
|
||
// connect(btn2,&QPushButton::clicked,this,&Widget3::to_sleep2);
|
||
|
||
// Lambda表达式(匿名函数)
|
||
// connect(btn,&QPushButton::clicked,[&](){
|
||
// emit stu->sleep();
|
||
|
||
// void(Student:: *sleep1)() = &Student::sleep;
|
||
// void(Teacher:: *wakeup1)() = &Teacher::wake_up;
|
||
// disconnect(stu,sleep1,techr,wakeup1);
|
||
// });
|
||
connect(btn2,&QPushButton::clicked,[&](){
|
||
const QString msg = edit->text();
|
||
emit stu->sleep(msg,2);
|
||
});
|
||
}
|
||
|
||
void Widget3::to_sleep()
|
||
{
|
||
emit stu->sleep(); // 发送一个睡觉的信号
|
||
}
|
||
|
||
void Widget3::to_sleep2()
|
||
{
|
||
const QString &msg = edit->text();
|
||
emit stu->sleep(msg,2);
|
||
}
|