前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Qt中的lambda表达式

Qt中的lambda表达式

作者头像
大忽悠爱学习
发布2021-11-15 10:18:43
9430
发布2021-11-15 10:18:43
举报
文章被收录于专栏:c++与qt学习

Qt中的lambda表达式

lambda用法超详细讲解

代码语言:javascript
复制
   [=]{btn->setText("我的名字叫开机");}; 这是lambda表达式函数的声明,不是调用
代码语言:javascript
复制
    QPushButton* btn=new QPushButton("我的名字叫做关机",this);
    resize(600,400);
    btn->resize(200,100);
    //lambda表达式在Qt中应用
   [=]{btn->setText("我的名字叫开机");}();//lambda表达式的dai调用

这里为什么值传递可以修改按钮的文本属性呢? 因为这里拷贝的是地址,lambda函数体内通过值传递得到的btn指向的地址不变。

捕获列表里面只捕获了btn,没有捕获btn1,因此无法识别btn1会报错 当捕获列表填入的是=或者是&,那么默认捕获所有当前函数内的所以局部变量

Qt中最常用的是={}

不建议在捕获列表中用引用的原因:

代码语言:javascript
复制
   QPushButton* btn=new QPushButton("我的名字叫做关机",this);
    resize(600,400);
    btn->resize(100,100);
     //当信号和槽连接时,控件内会进入一个锁的状态
    connect(btn,&QPushButton::clicked,this,[&]{btn->setText("我他妈直接好家伙");});

当我们点击按钮后,程序就产生异常而结束

是因为当信号和槽连接后,控件内会进入一个锁的状态,在上面例子中:btn控件进入锁的状态,即只能读不能写,不能通过btn去修改控件的内容,但是如果使用值传递,拷贝地址的方式就不算通过btn修改控件内容,而算间接修改

lambda表达式中通过值传递,函数默认为const常函数不可修改参数的值,但可以通过加mutable关键字来让其可以修改

代码语言:javascript
复制
    QPushButton* btn=new QPushButton("我的名字叫做关机",this);
    resize(600,400);
    btn->resize(100,100);
    int m=10;
    connect(btn,&QPushButton::clicked,this,[m]()mutable{int m=20;qDebug()<<m<<endl;});
    connect(btn,&QPushButton::clicked,this,[=]()mutable{qDebug()<<m<<endl;});

注意:加了mutable关键字后,前面的()不可以省略

返回值类型

代码语言:javascript
复制
    //->返回值类型
    //捕获列表后的[]不能省
    int num=[]()->int{return 1000;}();//调用()不能省
    qDebug()<<num<<endl;

lambda表达式中调用槽函数

代码语言:javascript
复制
    QPushButton* btn=new QPushButton("我的名字叫做关机",this);
    resize(600,400);
    btn->resize(100,100);
    //lambda表达式函数体中调用槽函数
    //点击按钮,关闭窗口
    connect(btn,&QPushButton::clicked,this,[=](){
        this->close();
    });

当connect函数第四个参数是lambda表达式时,第三个参数的this可以不写

代码语言:javascript
复制
    QPushButton* btn=new QPushButton("我的名字叫做关机",this);
    resize(600,400);
    btn->resize(100,100);
    //lambda表达式函数体中调用槽函数
    //点击按钮,关闭窗口
    connect(btn,&QPushButton::clicked,[=](){
        this->close();
    });
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/04/11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Qt中的lambda表达式
  • Qt中最常用的是={}
  • 返回值类型
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档