Qt信号与槽七种连接方式
1、 F3,F4编辑:拖入按键,按F4选择按键部位,拖动按键部位至mainwindow界面空白位置,并按如下操作:
图1
2、 signal、slots的Edit方式。如图2:
图2
3、 QT4下的方式:
(1) connect(bth,SIGNAL(clicked()),this,SLOT(myclicked()));
(2) 编辑myclicked()函数:
void MainWindow::myclicked()
{
qDebug()<<"myclose";
ui->label_2->setText("你好");
}
4、 自动连接方式:右击ui界面中的按键,转到槽。
5、 基于函数指针:connect(bth,&QPushButton::clicked,this,&MainWindow::myclicked);
其他与3相同。
6、Emit手动提交:
(1)在头文件中声明:
signals:
void mysignal();
(2)在on_pushButton_2_clicked()添加emit mysignal();如下:
void MainWindow::on_pushButton_2_clicked()
{
ui->pushButton_2->setText("HELLO!");
//手动提交,emit方式
emit mysignal();
}
(3) 在构造函数中添加:connect(this,SIGNAL(mysignal()),this,SLOT(myclicked()));
注:第6个的执行连接按键和label标签两个的改变。
7、使用lambda函数实现,仅限c++11以上,所以在使用的时候,必须注意.pro文件中是否有CONFIG += c++11;若没有可以手动加上。
connect(bth,&QPushButton::clicked,[bth](){
if(bth->text()=="lambda")
bth->setText("QST");
else
bth->setText("lambda");
qDebug()<<"11111111111";
});
执行后btn上显示lambda和QST点击改变。
并且一个信号可以连接多个槽,一个槽可以被多个信号连接。
附录:
lambda函数介绍:
声明Lambda表达式
Lambda表达式完整的声明格式如下:
[capture list] (params list) mutable exception-> return type { function body }
各项具体含义如下:
capture list:捕获外部变量列表
params list:形参列表
mutable指示符:用来说用是否可以修改捕获的变量
exception:异常设定
return type:返回类型
function body:函数体