一、信号的给申明
signals:
/*
* 信号声明一定要有signals关键字。
* 信号没有返回值,可以有参数。
* 信号可以重载参数
* 信号就是函数的声明,只需声明无需定义。
* 在函数中发送信号像调用函数一样,需要在信号函数前添加 emit 关键字
*/
void my_signal();
void my_signal(QString str);
二、槽的定义
public slots:
/*
* 槽的参数与信号相同,无返回值
* 需要定义
*/
void send_signal();
void send_signal1();
三、使用
//B是信号的拥有者,然后写信号,再写信号的接收者,最后跟槽函数。
connect(B, &QPushButton::pressed, this, &MainWidget::MySlot1);
//函数指针指向信号
void (MainWidget::*mys1)()=&MainWidget::MySlot2;
void (subWidget::*ms1)()=&subWidget::my_signal;
connect(&w, ms1, this, mys1);
void (subWidget::*ms2)(QString) = subWidget::my_signal;
void (MainWidget::*mys2)(QString)=&MainWidget::MySlot2;
connect(&w, ms2, this, mys2);
四、Lambda表达式代替信号接收者和槽函数
connect(&w, ms2,
[](){
qDebug()<<"nihao";
});
[] | 不捕获任何外部变量 |
[变量名, …] | 默认以值得形式捕获指定的多个外部变量(用逗号分隔),如果引用捕获,需要显示声明(使用&说明符) |
[this] | 以值的形式捕获this指针 |
[=] | 以值的形式捕获所有外部变量 |
[&] | 以引用形式捕获所有外部变量 |
[=, &x] | 变量x以引用形式捕获,其余变量以传值形式捕获 |
[&, x] | 变量x以值的形式捕获,其余变量以引用形式捕获 |
使用parameter内写信号的传给槽的参数。