一、什么是信号与槽
一个对象发送一个信号出去,另外一个对象接收到该信号后,会触发相应的槽函数
二、信号与槽的语法
connect(信号的发送者,SIGNAL(信号名称),信号的接收者,SLOT(槽函数));
1、写法:
QT 4 的写法
connect(sender,SIGNAL(valueChanged(QString,QString)),receiver,SLOT(updateValue(QString)));
QT 5的写法
connect(sender,&Sender::valueChanged,receiver,&Receiver::updateValue);
2、定义
控件生成信号定义:
①、在需要接收信号的类中 声明槽函数
//声明槽函数
public slots:
void set_label();
②、在xxx.cpp 中实现槽函数
void MainWindow::set_label()
{ui->label->setText("设置标签成功!!!666");}
③、进行信号与槽的关联
connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(set_label()));
用户自定义信号:
①、在信号的发送者类中声明信号
signals:
void mysig();
②、关联信号与槽
connect(this,SIGNAL(mysig()),this,SLOT(set_label()));
③、发送信号
emit mysig();
3、信号与槽的参数传递
①、定义一个带参的信号
signals:
//定义一个带参的信号
void mysig(int a);
②、定义一个带参数的槽
public slots:
void get_sig(int a);
③、进行信号与槽的关联
connect(this,SIGNAL(mysig(QString)),this,SLOT(get_sig(QString )));
④、发送带参数的信号
emit mysig("HELLO QT");
参数传递注意事项:
- 1、信号与槽的参数类型必须要匹配
- 2、发送者的参数的个数 必须要大于或等于 接收者参数的个数
信号与槽的取消关联
语法:
disconnect(信号的发送者,SIGNAL(发送的信号),信号的接收者,SLOT(接收的信号));
-----------------------------------------------------------------------
例子:
disconnect(this,SIGNAL(mysig()),this,SLOT(get_sig()));