Qt基础学习-lambda表达式

大家好!本篇文章将介绍Qt基础中的lambda表达式。由于博主水平有限,如有错误,欢迎大家指正!


文章导航

    • ✨Qt基础学习-lambda表达式✨
        • lambda表达式:
        • ☀️应用实例:
        • 总结


✨Qt基础学习-lambda表达式✨

lambda表达式:

Lambda表达式, 匿名函数对象,其可以理解为没有函数名的函数,是C++11增加的新特性。
在Qt中,Lambda表达式常和信号一起使用,非常方便,需要在项目文件中添加: CONFIG += C++11
首先看一下Lambda表达式的基本构成:

[capture](parameters) mutable ->return-type
{
statement
}

[函数对象参数] (操作符重载函数参数)mutable ->返回值{函数体}

1️⃣ 函数对象参数
[],标识一个Lambda表达式的开始,不能省略。函数对象参数是传递给编译器自动生成的函数对象类的构造函数的。函数对象参数只能使用Lambda之前的Lambda所在范围内可见的局部变量(包括Lambda所在类的this)。
函数对象参数有以下形式:

函数对象参数 说明
[] 不使用任何变量
[=] 以传值的方式使用所有外部变量
[&] 以传引用的方式使用所有外部变量
[x] 将x以传值的方式使用。使用时,函数体内不能修改传递进来的x的拷贝(默认情况下函数是const),添加mutable修饰符可对传递进来的x的拷贝进行修改
[x,&y] x以传值的方式使用,y以传引用的方式使用
[=,&x] x以传引用的方式使用,其余变量以传值的方式使用
[&,x] x以传值的方式使用,其余变量以传引用的方式使用

2️⃣ 操作符重载函数参数
标识重载的()操作符的参数,没有参数时,这部分可以省略。
参数可以通过按值(如:(a,b))和按引用(如:(&a,&b))两种方式进行传递。

3️⃣ mutable
mutable声明,这部分可以省略。

4️⃣返回值
->返回值类型,标识函数返回值的类型,当返回值为void,或者函数体中只有一处return的地方(此时编译器可以自动推断出返回值类型)时,这部分可以省略。

5️⃣ {函数体}
{},标识函数的实现,这部分不能省略,但函数体可以为空。

☀️应用实例:

widget.h:

#ifndef WIDGET_H
#define WIDGET_H
#include 
class Widget : public QWidget{
    Q_OBJECT
public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
};
#endif // WIDGET_H

widget.cpp:

#include "widget.h"
#include 
#include 
Widget::Widget(QWidget *parent)
    : QWidget(parent){
    //lambda表达式
    QPushButton *btn2 = new QPushButton;
    btn2->move(0,0);
    btn2->setParent(this);
    btn2->setText("aaa");
 }

main.cpp:

#include "widget.h"
#include 
int main(int argc, char *argv[]){
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

运行后效果如下:
Qt基础学习-lambda表达式_第1张图片widget.cpp中添加lambda表达式,

   [=](){
       btn2->setText("bbb");
   }();

可将按钮标签修改为:
Qt基础学习-lambda表达式_第2张图片

总结

刚开始学Qt,先接触到信号和槽,然后就学习Lambda表达式,其常和信号一起使用,非常方便,后续随着Qt的继续学习,还会继续记录自己觉得比较有趣的内容。
希望这篇文章能给正在学习Qt的小伙伴们一些帮助✊✊。
觉得文章写得不错的老铁们,点赞评论关注走一波!谢谢啦 !

你可能感兴趣的:(Qt学习,qt,学习,开发语言)