6、Lambda表达式(推荐使用)

本文介绍了C++11新增的Lambda表达式(匿名函数对象),它与Qt配合信号使用很方便。在pro项目文件中引入该特性,通过connect可了解其用法,还说明了不同引入外部对象和变量方式的特点,如[=]、[this]、[&]等,并给出了mywidget.cpp代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Lambda表达式(匿名的函数对象),是C++11增加的新特性,Qt配合信号一起使用,非常方便。

pro项目文件中引入了这种特性: CONFIG += c++11

通过connect来了解Lambda表达式:

connect(b,&QPushButton::pressed,
            [](){
        qDebug()<<"5.22"; //输出字符串
    });

[ ]( ){ }替代了原来的调用函数,非常方便。[传入外部对象成员](参数){函数体}

connect(b,&QPushButton::pressed,
            [b](){ //若不引入对象b,提示b未被捕获。
        b->setText("改变后");
    });

[=],等号的作用:把所有外部对象、变量(包括头文件中的)以值传递方式引入。即复制

    int a=10,c=100;
    connect(b,&QPushButton::pressed,
            [a,c](){ //若外部对象、变量很多需要引入,用[=],其实就是复制
        qDebug()<<a<<c;
    });

注意:a、c是只读的,不允许被更改。可用mutable实现更改

    connect(b,&QPushButton::pressed,
            [=]() mutable {
        a=11,c=101;
        qDebug()<<a<<c;
    });

[this],类中所有成员以值传递方式引入

[&],外部所有局部变量引入。&是引用符号(此处不是取地址符)。内存被占用时容易出问题,不推荐。

mywidget.cpp具体代码如下:其他文件原封不动、默认即可。

/*单击b按钮,输出字符串*/
#include "mywidget.h"
#include <QPushButton> //引入按钮
#include <QDebug> //引入打印

MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
{
    QPushButton *b=new QPushButton(this);
    b->setText("Lambda表达式");

    connect(b,&QPushButton::pressed,
            [](){
        qDebug()<<"5.22"; //输出字符串
    });
}

MyWidget::~MyWidget()
{

}
/*单击b按钮,按钮文本被改变*/
#include "mywidget.h"
#include <QPushButton> //引入按钮
#include <QDebug> //引入打印

MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
{
    QPushButton *b=new QPushButton(this);
    b->setText("Lambda表达式");

    connect(b,&QPushButton::pressed,
            [b](){ //若不引入对象b,提示b未被捕获。
        b->setText("改变后");
    });
}

MyWidget::~MyWidget()
{

}
#include "mywidget.h"
#include <QPushButton> //引入按钮
#include <QDebug> //引入打印

MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
{
    QPushButton *b=new QPushButton(this);
    b->setText("Lambda表达式");
    int a=10,c=100;
    connect(b,&QPushButton::pressed,
            [=]() mutable {
        a=11,c=101;
        qDebug()<<a<<c;
    });
}

MyWidget::~MyWidget()
{

}

 

转载于:https://www.cnblogs.com/xixixing/p/10906311.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值