6、Lambda表达式(推荐使用)

Lambda表达式(匿名的函数对象),是C++11增加的新特性,Qt配合信号一起使用,非常方便。
pro项目文件中引入了这种特性: CONFIG += c++11
通过connect来了解Lambda表达式:
connect(b,&QPushButton::pressed,
[](){
qDebug()<<"5.22"; //输出字符串
});
[ ]( ){ }替代了原来的调用函数,非常方便。[传入外部对象成员](参数){函数体}
connect(b,&QPushButton::pressed,
[b](){ //若不引入对象b,提示b未被捕获。
b->setText("改变后");
});
[=],等号的作用:把所有外部对象、变量(包括头文件中的)以值传递方式引入。即复制
int a=,c=;
connect(b,&QPushButton::pressed,
[a,c](){ //若外部对象、变量很多需要引入,用[=],其实就是复制
qDebug()<<a<<c;
});
注意:a、c是只读的,不允许被更改。可用mutable实现更改
connect(b,&QPushButton::pressed,
[=]() mutable {
a=,c=;
qDebug()<<a<<c;
});
[this],类中所有成员以值传递方式引入
[&],外部所有局部变量引入。&是引用符号(此处不是取地址符)。内存被占用时容易出问题,不推荐。
mywidget.cpp具体代码如下:其他文件原封不动、默认即可。
/*单击b按钮,输出字符串*/
#include "mywidget.h"
#include <QPushButton> //引入按钮
#include <QDebug> //引入打印 MyWidget::MyWidget(QWidget *parent)
: QWidget(parent)
{
QPushButton *b=new QPushButton(this);
b->setText("Lambda表达式"); connect(b,&QPushButton::pressed,
[](){
qDebug()<<"5.22"; //输出字符串
});
} MyWidget::~MyWidget()
{ }
/*单击b按钮,按钮文本被改变*/
#include "mywidget.h"
#include <QPushButton> //引入按钮
#include <QDebug> //引入打印 MyWidget::MyWidget(QWidget *parent)
: QWidget(parent)
{
QPushButton *b=new QPushButton(this);
b->setText("Lambda表达式"); connect(b,&QPushButton::pressed,
[b](){ //若不引入对象b,提示b未被捕获。
b->setText("改变后");
});
} MyWidget::~MyWidget()
{ }
#include "mywidget.h"
#include <QPushButton> //引入按钮
#include <QDebug> //引入打印 MyWidget::MyWidget(QWidget *parent)
: QWidget(parent)
{
QPushButton *b=new QPushButton(this);
b->setText("Lambda表达式");
int a=,c=;
connect(b,&QPushButton::pressed,
[=]() mutable {
a=,c=;
qDebug()<<a<<c;
});
} MyWidget::~MyWidget()
{ }
6、Lambda表达式(推荐使用)的更多相关文章
- Java8之——简洁优雅的Lambda表达式
Java8发布之后,Lambda表达式,Stream等等之类的字眼边慢慢出现在我们字眼.就像是Java7出现了之后,大家看到了“钻石语法”,看到了try-with-resource等等.面对这些新东西 ...
- lambda表达式
什么是Lambda表达式 lambda表达式,它将允许我们将行为传到函数里.在Java 8之前,如果想将行为传入函数,仅有的选择就是匿名类,需要6行代码.而定义行为最重要的那行代码,却混在中间不够突出 ...
- lambda表达式和查询表达式
(1)Lambda表达式定义: Lambda是创建匿名函数的另一种形式.它比对应的匿名方法更加的简化.因此,所有的情况都推荐使用Lambda表达式. 它可以包括表达式和语句,并且用于创建委托和事件 ...
- 【转载】C++ function、bind和lambda表达式
本篇随笔为转载,原贴地址:C++ function.bind和lambda表达式. 本文是C++0x系列的第四篇,主要是内容是C++0x中新增的lambda表达式, function对象和bind机制 ...
- 委托、匿名函数与Lambda表达式初步
(以下内容主要来自<C#本质论第三版>第十二章委托和Lambda表达式) 一.委托续 上上周五看了看委托,初步明白了其是个什么,如何定义并调用.上周五准备看Lambda表达式,结果发现C# ...
- Python3基础 map 与 lambda表达式配合 将指定系列元素乘2
镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...
- Python3基础 filter与lambda表达式配合 筛选出1-100之间的奇数
镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...
- 初探Lambda表达式/Java多核编程【0】从外部迭代到内部迭代
开篇 放假前从学校图书馆中借来一本书,Oracle官方的<精通Lambda表达式:Java多核编程>. 假期已过大半才想起来还没翻上几页,在此先推荐给大家. 此书内容及其简洁干练,如果你对 ...
- 初探Lambda表达式/Java多核编程【4】Lambda变量捕获
这周开学,上了两天感觉课好多,学校现在还停水,宿舍网络也还没通,简直爆炸,感觉能静下心看书的时间越来越少了...寒假还有些看过书之后的存货,现在写一点发出来.加上假期两个月左右都过去了书才看了1/7都 ...
随机推荐
- 利用docker搭建本地私有镜像仓库
主机名 角色 sht-sgmhadoopcm-01 Docker Repository sht-sgmhadoopnn-01 Docker Client 1. 在两台节点分别安装docker http ...
- Random Pick with Weight
Given an array w of positive integers, where w[i] describes the weight of index i, write a function ...
- P4942小凯的数字
给定一个序列,如12345 56789 1011121314等,输出对其取余9的结果. 那么我们需要明白一个定理,一个序列对一个数的取余结果等于它各位之和取余那个数的结果.证明似乎是这样∑i=0na ...
- Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态)
Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态) 1.面向对象的三大特性: (1)继承 继承是一种创建新类的方式,在Python中,新建的类可以继承一个或多个父类,父类又可以 ...
- 关于Faster-RCNN训练细节
Faster RCNN训练: 四部训练法: Faster R-CNN,可以大致分为两个部分,一个是RPN网络,另一个是Fast R-CNN网络,前者是一种候选框(proposal)的推荐算法,而后者则 ...
- C语言经典100例(1-50)
[程序1] 题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去掉不满足条件的排列. main ...
- MySQL性能优化(七):其它优化
原文:MySQL性能优化(七):其它优化 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/v ...
- O024、Nova组件如何协同工作
参考https://www.cnblogs.com/CloudMan6/p/5415836.html Nova 物理部署方案 前面大家已经看到 Nova 由很多子服务组成,我们也知道OpenS ...
- Axure(一)
axure1.原型工具 2.软件开发 1.可行性分析2.需求分析 产品经理(和甲方对接需求,) 乙方 -- 甲方 ps(专业性强,精美) 设计师 html(可变 ...
- JS根据一个经纬度及距离角度,算出另外一个经纬度
var mapNumberUtil = {}; /** * 根据一个经纬度及距离角度,算出另外一个经纬度 * @param {*} lng 经度 113.3960698 * @param {*} la ...