Lambda表达式:

c++11新增特性,需要在项目文件中加入CONFIG+=C++11

QT配合信号一起使用,很方便

  QPushButton *lamda=new QPushButton(this);//如果在构造函数中想要设置一个按钮的话,使用指针和new是一个非常好的选择,因为new出来的空间不释放就一直存在lamda->move(50,200);lamda->setText("Lamda表示式");connect(lamda,&QPushButton::released,[](){//qDebug()函数会自动换行qDebug()<<"Lamba表达式调用";});

如果我试图调用lamda表达式外面的变量

connect(lamda,&QPushButton::released,[](){lamda->setText("改变");//qDebug()函数会自动换行qDebug()<<"Lamba表达式调用";});

会产生编译错误:

------------------------------------------------------------------------------------------------------------------------------------------------------

这样就体现出了Lamda表达式[]的作用

 connect(lamda,&QPushButton::released,[lamda]()//lamda表达式的[]的作用——把外面的变量传进来           {lamda->setText("改变");//qDebug()函数会自动换行qDebug()<<"Lamba表达式调用";});

如果想要把外部所有局部变量和类中成员全部传参,那么就可以使用[=],但是这样传参都是以只读的形式传参

  int Gimgoon=886;connect(lamda,&QPushButton::released,[=]()//lamda表达式的[]的作用——把外面的变量传进来,如果想要把外部所有局部变量和类中成员全部按值传递,那么就可以使用[=],这样传递都是以只读的形式传递{lamda->setText("改变");//qDebug()函数会自动换行qDebug()<<"Lamba表达式调用";qDebug()<<Gimgoon;Gimgoon++;});

如果试图修改会发生编译错误:

--------------------------------------------------------------------------------------------------------------------------------------

当然,想要修改变量值也是可以的,在参数列表()后添加关键字mutable

int Gimgoon=886;connect(lamda,&QPushButton::released,[=]() mutable//lamda表达式的[]的作用——把外部变量传进来,如果想要把外部所有局部变量和类中成员全部按值传递,那么就可以使用[=],这样传递都是以只读的形式传递//当然,想要修改变量值也是可以的,在参数列表()后添加关键字mutable{lamda->setText("改变");//qDebug()函数会自动换行qDebug()<<"Lamba表达式调用";qDebug()<<Gimgoon;Gimgoon++;});

程序运行:

如上图,每一次点击按钮,发现Gimgoon变量都发生了改变。

[]中的内容:

=:把外部的所有局部变量和类中成员按值传递

this:把类中成员按值传递

&:把外部的所有局部变量以引用的方式传进来

----------------------------------------------------------------------------------------------------------------------------------------------------------------------

注意:如果按钮是使用new来构造的,就不能使用&来传递,否则会出问题

 connect(lamda,&QPushButton::released,[&]() mutable//lamda表达式的[]的作用——把外面的变量传进来,如果想要把外部所有局部变量和类中成员全部按值传递,那么就可以使用[=],这样传参都是以只读的形式传参//当然,想要修改变量值也是可以的,在参数列表()后添加关键字mutable//[]中的内容://=:把外部的所有局部变量和类中成员按值传递//this:把类中成员按值传递//&:把外部的所有局部变量以引用的方式传进来   注意:如果按钮是使用new来构造的,就不能使用&来传递,否则会出问题{lamda->setText("改变");//qDebug()函数会自动换行qDebug()<<"Lamba表达式调用";qDebug()<<Gimgoon;Gimgoon++;});

运行一下:

我发生的情况是程序异常结束!!!

-----------------------------------------------------------------------------------------------------------------------------------------------

Lamda表达式传参(和信号参数一致,值也一致):

connect(lamda,&QPushButton::clicked,[=](bool isCheck){qDebug()<<isCheck;});

运行:

每一次点击“Lamda表达式”按钮,都会输出一个false。

最后再提一句信号,信号属于谁,就由谁发出!!!

QT学习(六)——Lamda表达式的使用相关推荐

  1. Qt 工具类(05):在Qt里使用Lamda表达式

    文章目录 一.前言 二.什么是Lamda表达式? 2.1. Lambda 表达式的语法 2.2.Lambda函数的捕获列表 三.在Qt中使用Lambda表达式函数 3.1.信号连接Lambda 3.2 ...

  2. Qt学习(六):UDP通信

    知识点 qt中UDP通信 组播 获取编辑器内容,发送到套接字 完整项目github地址: https://github.com/taw19960426/Qt_study/tree/main/QUdpS ...

  3. 【QT学习六】QTextEdit

    目录 一.概述 二.QTextEdit的使用 创建QTextEdit控件 设置文本内容 获取文本内容 格式化文本 设置文本格式 插入图像 插入超链接 其他常用函数 三.QTextEdit类使用时注意事 ...

  4. 一个小案例精通lamda表达式与函数式接口

    前言:只有基础(多态.匿名接口实现类)足够扎实才能更好的学习花拳绣腿(lamda表达式),Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性.Lambda 允许把函数作为一 ...

  5. Lamda表达式详解

    Lamda表达式 1.λ 希腊字母表中排序第十一位的字母,英语名称为 Lamda 2.避免匿名内部类定义过多 3.可以让你的代码看起来很简洁 4.去掉了一堆没有意义的代码,留下核心的逻辑 3.其实质属 ...

  6. QT学习笔记(十六):setwindowflags的属性总结

    QT学习笔记(十六):setwindowflags的属性总结 此枚举类型用于为小部件指定各种窗口系统属性.它们是不常用的,但在一些情况下是必要的.其中一些标志取决于底层窗口管理器是否支持它们. 主要类 ...

  7. QT学习笔记(六):Qt5主窗口框架示例

    QT学习笔记(五):Qt5主窗口框架代码示例 一.添加编辑菜单:并在下拉菜单和工具栏中添加"打开文件"动作菜单 #include <QToolButton> #incl ...

  8. LAMDA表达式学习

    1. 普通绑定: public void button1_Click(object sender, EventArgs e){MessageBox.Show("ok");}this ...

  9. Lamda表达式学习总结

    Lamda表达式(希望一行代码处理完) 1.IMesssage msg =(参数)-> 输出语句(参数) // IMessage里面只能有一个方法否则报错    @FunctionalInter ...

最新文章

  1. 函数式编程——做到并发,不可变数据修改就只能复制后修改返回
  2. SAP 报表程序的一些标准功能码
  3. python中的函数、生成器的工作原理
  4. kafka后台启动命令
  5. CG CTF WEB MYSQL
  6. django【orm操作】
  7. SAP Spartacus component-wrapper自定义指令的实现
  8. 日志对服务器压力,服务器一大堆错误日志的解决方法
  9. 学习python的错误总结
  10. 理性看待360大战腾讯
  11. xml中外部引用DTD文档
  12. 【Google Chrome】reCAPTCHA did not get loaded.
  13. Elastic-Job原理--任务失败转移(五)
  14. 2014校园招聘_腾讯2014校园招聘
  15. Image Matching:SuperGlue论文阅读笔记
  16. Flutter Scaffold的详细解说
  17. IPv4/IPv6地址范围与网络地址/子网掩码的转换,点分十进制与数字掩码的转换
  18. 如何挑选自己喜欢的colormap样式
  19. js 原子级操作_原子操作与同步机制
  20. Oracle索引梳理系列(五)- Oracle索引种类之表簇索引(cluster index)

热门文章

  1. 解构给默认值_函数的对象参数的解构和默认值
  2. windows10应用程序需要设置管理员权限自启动
  3. python入门简单教学
  4. ZJM 与纸条(KMP算法)
  5. 滴滴云千万补贴,助力中小企业数字化转型
  6. 部署harbor并实现https(SAN签发证书)
  7. 幽默感七个技巧_16个聊天幽默技巧 几招让你变的风趣幽默
  8. pytorch加载自己的图片数据集的两种方法
  9. 图片数据的基本预处理与数据增强
  10. 怎么将一个音频无损剪切