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表达式(推荐使用)的更多相关文章

  1. Java8之——简洁优雅的Lambda表达式

    Java8发布之后,Lambda表达式,Stream等等之类的字眼边慢慢出现在我们字眼.就像是Java7出现了之后,大家看到了“钻石语法”,看到了try-with-resource等等.面对这些新东西 ...

  2. lambda表达式

    什么是Lambda表达式 lambda表达式,它将允许我们将行为传到函数里.在Java 8之前,如果想将行为传入函数,仅有的选择就是匿名类,需要6行代码.而定义行为最重要的那行代码,却混在中间不够突出 ...

  3. lambda表达式和查询表达式

    (1)Lambda表达式定义: Lambda是创建匿名函数的另一种形式.它比对应的匿名方法更加的简化.因此,所有的情况都推荐使用Lambda表达式.   它可以包括表达式和语句,并且用于创建委托和事件 ...

  4. 【转载】C++ function、bind和lambda表达式

    本篇随笔为转载,原贴地址:C++ function.bind和lambda表达式. 本文是C++0x系列的第四篇,主要是内容是C++0x中新增的lambda表达式, function对象和bind机制 ...

  5. 委托、匿名函数与Lambda表达式初步

    (以下内容主要来自<C#本质论第三版>第十二章委托和Lambda表达式) 一.委托续 上上周五看了看委托,初步明白了其是个什么,如何定义并调用.上周五准备看Lambda表达式,结果发现C# ...

  6. Python3基础 map 与 lambda表达式配合 将指定系列元素乘2

    镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...

  7. Python3基础 filter与lambda表达式配合 筛选出1-100之间的奇数

    镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...

  8. 初探Lambda表达式/Java多核编程【0】从外部迭代到内部迭代

    开篇 放假前从学校图书馆中借来一本书,Oracle官方的<精通Lambda表达式:Java多核编程>. 假期已过大半才想起来还没翻上几页,在此先推荐给大家. 此书内容及其简洁干练,如果你对 ...

  9. 初探Lambda表达式/Java多核编程【4】Lambda变量捕获

    这周开学,上了两天感觉课好多,学校现在还停水,宿舍网络也还没通,简直爆炸,感觉能静下心看书的时间越来越少了...寒假还有些看过书之后的存货,现在写一点发出来.加上假期两个月左右都过去了书才看了1/7都 ...

随机推荐

  1. ciscn-华北赛区-Day1-Web2题解

    漏洞点 薅羊毛逻辑漏洞 Cookie伪造 -> JWT python反序列化 -> 反弹shell 薅羊毛逻辑漏洞 打开题目是这样一个页面 其实最初的题目这个募集资金的进度条是没有刷满的, ...

  2. session的垃圾回收机制

    session.gc_maxlifetime session.gc_probability session.gc_divisor session.gc_divisor 与 session.gc_pro ...

  3. HTML5自学2

    1.1   文字格式 一个杂乱无序.堆砌而成的网页,会让人感觉枯无味,而一个美观大方的网页,会让人有美轮美奂,流连忘返的感觉,本节将介绍如何设置网页文本格式. 文字格式包括字体.字号.文字颜色.字体风 ...

  4. USB fuzzing

    简介 最近看一些USB fuzzing方面的东西,总结一下.主要是软件方面的工作. vUSBf 文章在这里:https://www.blackhat.com/docs/eu-14/materials/ ...

  5. hashmap存储数据

    在HashMap中,为什么不能使用基本数据类型作为key? 其实和HashMap底层的存储原理有关,HashMap存储数据的特点是:无序.无索引.不能存储重复元素. 存储元素采用的是hash表存储数据 ...

  6. Codeforces 1201E2. Knightmare (hard)

    传送门 看到棋盘先黑白染色冷静一下 然后分析发现,如果初始时两只马在同色的格子,那么一定是后手吃先手 反之一定是先手吃后手 所以分类讨论一下,如果初始在同色的格子,并且后手到达终点的步数更少,那么后手 ...

  7. java中接口知识点大总结

    接口的确很不好理解!!!!!那我来好好总结一下: 首先要理解接口是一个独立存在的,和类是不一样的东西,所以,直接用接口的定义是: 访问权限控制符 interface 接口名 [extends  接口列 ...

  8. 设置adb shell的环境变量

    1.设置adb系统变量 adb  D:\androidStudio\platform-tools;D:\androidStudio\tools 2.设置path系统变量 path D:\android ...

  9. 关于不同retina的布局

    不同retina,显示高度不一样,很显然最细的线条最美 <!DOCTYPE html> <html lang="en"> <head> < ...

  10. Linux下创建仓库的软件包createrepo

    createrepo是linux下的创建仓库的软件包.create是创建的意思,repo是repository的缩写,是仓库的意思. yum(Yellow dog Updater,Modified)主 ...