Qt 5 最新信号和槽连接方式以及Lambda表达式

时间:2020-12-09 19:14:55

最近学习Qt,发现新大陆,这里做下记录。

Qt 5 最新信号和槽连接方式以及Lambda表达式

 

主要内容就是原始Qt4的信号槽连接方式,以及Qt5新版的连接方式,还有件事简单演示一下lambda表达式的使用方式

代码如下

/*
 * 作者:张建伟
 * 时间:2018年4月1日
 * 简述:该Demo仅仅用于测试和演示Qt5与Qt4的连接方式以及最新的槽函数支持lambda表达式
 */

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    // 传统Qt是连接方式
    // 传统Qt4连接方式为 信号发送者,信号,信号接受者,处理函数
    QObject::connect(ui->pushButton,SIGNAL(clicked(bool)),this,SLOT(qT4_slot()));

    //Qt5连接方式
    //其实这么写的方式和Qt4没有啥却别,只是在Qt4 中引用了信号槽,在简单的使用时没有问题,但是在庞大的工程中,信号和曹 仅仅是宏替换,在编译的时候没有安全监测
    //Qt5的新方法,在编译的时候就会有监测,如果我们手误操作失误,就会出现问题
    QObject::connect(ui->pushButton_2,&QPushButton::clicked,this,&Widget::qT5_slot);



    //Qt5 Lambda表达式
    //这里需要注意 Lambda表达式是C++ 11 的内容,所以,需要再Pro项目文件中加入 CONFIG += C++ 11
    QObject::connect(ui->pushButton_3,&QPushButton::clicked,[=](){qDebug()<<"lambda 表达式";});



}

Widget::~Widget()
{
    delete ui;
}

void Widget::qT4_slot()
{
    qDebug()<< "This is Qt 4 Connect method";
}

void Widget::qT5_slot()
{
    qDebug()<< "This is Qt 5 Connect method";
}

Qt 5 最新信号和槽连接方式以及Lambda表达式