星星博客 »  > 

Qt信号与槽七种连接方式

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:函数体

相关文章