qt中lambda简述——————附带实际代码案例
文章目录0 背景1 介绍1.1 捕获的列表1.2 形参列表2 使用2.1 特别短小的槽函数(发挥匿名函数的“一次性函数作用”)0 背景qt中经常会使用信号来调用槽函数,但是有时候槽函数特别短,有诸多不便,因此找寻一种解决方法,发现了lambda表达式。1 介绍结构[捕获的列表](形参列表)mutable{函数体}1.1 捕获的列表捕获形式说明[]不捕获任何外部变量[变量名, …]默认以值得形式捕获
·
0 背景
qt中经常会使用信号来调用槽函数,但是有时候槽函数特别短,有诸多不便,因此找寻一种解决方法,发现了lambda表达式。
1 介绍
结构
[捕获的列表](形参列表)mutable{函数体}
1.1 捕获的列表
捕获形式 说明
[] 不捕获任何外部变量
[变量名, …] 默认以值得形式捕获指定的多个外部变量(用逗号分隔),如果引用捕获,需要显示声明(使用&说明符)
[this] 以值的形式捕获this指针
[=] 以值的形式捕获所有外部变量
[&] 以引用形式捕获所有外部变量
[=, &x] 变量x以引用形式捕获,其余变量以传值形式捕获
[&, x] 变量x以值的形式捕获,其余变量以引用形式捕获
1.2 形参列表
如果是按值[=]传递时,不允许程序员修改捕获的变量,使用mutable可以打破限制。
测试代码:
int a1 = 10;
//会报错:error: cannot assign to a variable captured by copy in a non-mutable lambda
//[=](){ a1 = 20;};
[=]()mutable{ a1 = 20;};
qDebug()<<"A:"<<a1;

2 使用
2.1 特别短小的槽函数(发挥匿名函数的“一次性函数作用”)
.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private:
Ui::Widget *ui;
private:
int a = 0;//声明变量
};
#endif // WIDGET_H
.cpp
#include "widget.h"
#include "ui_widget.h"
#include<QDebug>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//改变变量
connect(ui->pushButton, &QPushButton::clicked, [=](){
a = 10;
});
}
Widget::~Widget()
{
delete ui;
}
更多推荐


所有评论(0)