QT学习(六)——Lamda表达式的使用
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表达式的使用相关推荐
- Qt 工具类(05):在Qt里使用Lamda表达式
文章目录 一.前言 二.什么是Lamda表达式? 2.1. Lambda 表达式的语法 2.2.Lambda函数的捕获列表 三.在Qt中使用Lambda表达式函数 3.1.信号连接Lambda 3.2 ...
- Qt学习(六):UDP通信
知识点 qt中UDP通信 组播 获取编辑器内容,发送到套接字 完整项目github地址: https://github.com/taw19960426/Qt_study/tree/main/QUdpS ...
- 【QT学习六】QTextEdit
目录 一.概述 二.QTextEdit的使用 创建QTextEdit控件 设置文本内容 获取文本内容 格式化文本 设置文本格式 插入图像 插入超链接 其他常用函数 三.QTextEdit类使用时注意事 ...
- 一个小案例精通lamda表达式与函数式接口
前言:只有基础(多态.匿名接口实现类)足够扎实才能更好的学习花拳绣腿(lamda表达式),Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性.Lambda 允许把函数作为一 ...
- Lamda表达式详解
Lamda表达式 1.λ 希腊字母表中排序第十一位的字母,英语名称为 Lamda 2.避免匿名内部类定义过多 3.可以让你的代码看起来很简洁 4.去掉了一堆没有意义的代码,留下核心的逻辑 3.其实质属 ...
- QT学习笔记(十六):setwindowflags的属性总结
QT学习笔记(十六):setwindowflags的属性总结 此枚举类型用于为小部件指定各种窗口系统属性.它们是不常用的,但在一些情况下是必要的.其中一些标志取决于底层窗口管理器是否支持它们. 主要类 ...
- QT学习笔记(六):Qt5主窗口框架示例
QT学习笔记(五):Qt5主窗口框架代码示例 一.添加编辑菜单:并在下拉菜单和工具栏中添加"打开文件"动作菜单 #include <QToolButton> #incl ...
- LAMDA表达式学习
1. 普通绑定: public void button1_Click(object sender, EventArgs e){MessageBox.Show("ok");}this ...
- Lamda表达式学习总结
Lamda表达式(希望一行代码处理完) 1.IMesssage msg =(参数)-> 输出语句(参数) // IMessage里面只能有一个方法否则报错 @FunctionalInter ...
最新文章
- 函数式编程——做到并发,不可变数据修改就只能复制后修改返回
- SAP 报表程序的一些标准功能码
- python中的函数、生成器的工作原理
- kafka后台启动命令
- CG CTF WEB MYSQL
- django【orm操作】
- SAP Spartacus component-wrapper自定义指令的实现
- 日志对服务器压力,服务器一大堆错误日志的解决方法
- 学习python的错误总结
- 理性看待360大战腾讯
- xml中外部引用DTD文档
- 【Google Chrome】reCAPTCHA did not get loaded.
- Elastic-Job原理--任务失败转移(五)
- 2014校园招聘_腾讯2014校园招聘
- Image Matching:SuperGlue论文阅读笔记
- Flutter Scaffold的详细解说
- IPv4/IPv6地址范围与网络地址/子网掩码的转换,点分十进制与数字掩码的转换
- 如何挑选自己喜欢的colormap样式
- js 原子级操作_原子操作与同步机制
- Oracle索引梳理系列(五)- Oracle索引种类之表簇索引(cluster index)