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. grep与正则表达式:

    1.grep程序 Linux下有文本处理三剑客 -- grep sed awk grep:文本 行过滤工具 sed: 文本 行编辑器(流编辑器) awk:报告生成器(做文本输出格式化)  grep   ...

  2. js、jQuery各种高度

    height.js ```$(document).height(); //整个网页的高度 $(window).height(); //浏览器可视窗口的高度 $(window).scrollTop(); ...

  3. Thinkphp5.0上传图片与运行python脚本

    这里只体现了php可以通过批处理文件调用python脚本的效果 控制器代码 访问路径为127.0.0.1/index/index/upload. index模块,index控制器,upload方法. ...

  4. WPF使用资源图片

    一.加载本项目的图片 WPF引入了统一资源表示Uri来标识和访问资源.其中较为常见的情况是用Uri加载图像.Uri表达式的一把形式为:协议+授权+路径 协议:pack:// 授权:有两种,一种用于访问 ...

  5. MySQL性能优化(六):分区

    原文:MySQL性能优化(六):分区 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/vbi ...

  6. 导出excel-NPOI

    前台调用: view: <a href='/Admin/NurseUser/Excel' target='_blank'>导出Excel</a>或js: window.loca ...

  7. [转载]C++STL概述

    来源:https://www.cnblogs.com/dyllove98/p/3214898.html 什么是容器 首先,我们必须理解一下什么是容器,在 C++ 中容器被定义为:在数据存储上,有一种对 ...

  8. websocket具体如何使用

    本人是在https://blog.csdn.net/jintingbo/article/details/80755636此地址学习的,所以留做笔记用于之后的学习 现在在写一个工程,是关于监控摄像头的, ...

  9. Linux grep命令 -- 三剑客老三

    常用选项 -E :开启扩展(Extend)的正则表达式. -i :忽略大小写(ignore case). -v :反过来(invert),只打印没有匹配的,而匹配的反而不打印. -n :显示行号 -w ...

  10. Linux编译阻塞型驱动遇到'TASK_NORMAL' undeclared (first use in this function)问题解决办法

    http://blog.csdn.net/qq_16405157/article/details/49281793