Qt入门---Lambda表达式

本文介绍了C++11中的lambda表达式,包括其基本结构、mutable修饰符的使用、在Qt中的应用以及如何用作槽函数替代。展示了如何在connect函数中利用lambda处理不同参数情况和调用其他函数。

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

Lambda表达式---c++11的特性 定义了一个可调用的匿名函数

 简单介绍:C++11:lambda表达式_lambda表达式c++11-优快云博客

基本结构    [] () mutable(根据具体需求来决定是否使用该修饰符) -> 函数返回值类型{

                   函数体

                   } ()//()代表声明后直接调用

捕捉列表[ ]中常用的三个捕捉项

        空 不使用任何函数对象参数

        = 函数体内可以使用Lambda所在作用范围内的所有可见的局部变量 包含Lambda所在类的this 值传递方式

        & 函数体内可以使用Lambda所在作用范围内的所有可见的局部变量 包含Lambda所在类的this 引用传递方式 一般不建议使用 引用传递代表要修改某个变量值 该变量值会被锁住 可能会带来一些问题

参数列表() 对应正常的函数参数列表

mutable:默认情况下,lambda函数总是一个const函数,mutable可以取消其常量性。使用该修饰符时,参数列表不可省略(即使参数为空)

函数体{}:在该函数体内,除了可以使用其参数外,还可以使用所有捕获到的变量。

在Qt中的应用:

直接应用在connect函数中代替槽函数

QPushButton * btn1 = new QPushButton("按钮一", this);
QPushButton * btn2 = new QPushButton("按纽二", this);

btn1->move(100, 100);
btn2->move(200, 200);

int num = 10;
//mutable修饰符可以使[]捕捉到的变量(被捕变量自带const属性)失去const属性 即可以对值进行修改
connect(btn1, &QPushButton::clicked, this, [num]()mutable{num = 20; qDebug() << num;});
connect(btn2, &QPushButton::clicked, this, [=](){qDebug() << num;});

qDebug() << num;

Lambda表达式的一个优点就在于可以代替槽函数,并且优势在于与信号的参数限制

信号的参数类型必须与槽函数的参数类型一一对应且参数个数不得少于槽函数的参数个数

如果采用Lambda表达式 参数列表为void 使用捕捉列表[ ]捕捉到变量应用到函数体中可以达到同样的效果 且对信号的参数就没有数量及类型的限制了

参考应用    函数体内可调用多个函数

connect(btn1, &QPushButton::clicked, this, [=](){
     emit zhy->hungry("北京烤鸭");
});

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值