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都 ...
随机推荐
- Logger Rate Limiter
Design a logger system that receive stream of messages along with its timestamps, each message shoul ...
- springdata的jpa配置文件application.xml
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...
- 小记---------CDH版大数据组件--clouderManager UI界面
启动 /opt/cm-5.14.0/etc/init.d/clouder-scm-server start /opt/cm-5.14.0/etc/init.d/clouder-scm-agent st ...
- 有关于eclipse启动调试时出现EOFexpetion错误的解决办法
1.打开调试透视窗 2.找到所有断点 3.清空所有断点后再去打断点,再去调试 网上说法:这个问题可能是由于eclipse和tomcat的交互而产生的,在以debug模式启动tomcat时,发生了读取文 ...
- ubuntu18.04 开机自动启动脚本的坑
哇 这个真的难受 找了半天的方案不能用 自暴自弃用的图形界面设置
- sql--ALTER
ALTER TABLE 语句 ALTER TABLE 语句用于在已有的表中添加.修改或删除列. SQL ALTER TABLE 语法 如需在表中添加列,请使用下列语法: ALTER TABLE tab ...
- Linux Exploit系列之七 绕过 ASLR -- 第二部分
原文地址:https://github.com/wizardforcel/sploitfun-linux-x86-exp-tut-zh/blob/master/7.md 这一节是简单暴力的一节,作者讲 ...
- java apache-commons-collections中Map辅助类的使用
前言 apache-commons-collections中Map辅助类,很是有用.尽管我们通过原生Map经过业务逻辑处理也能达到相同的作用与效果,但毕竟作为一个开源的工具类辅助类,对它有个了解还是有 ...
- Swift(三)基本运算符
Swift支持大部分标准C语言的运算符,并且对许多特性进行改进来减少常规编码的错误.除了支持基本运算符外,Swift还提供了2个特殊的运算符,分别是:溢出运算符和区间运算符 首先看下基本运算符 imp ...
- 织梦DEDEcms5.7解决arclist标签调用副栏目文章
使用arclist标签调用文章的时候才发现,根本无法调用相关文章. 下面给出解决办法,希望帮到需要的人. 找到/include/taglib/arclist.lib.php文件然后打开.然后在大约30 ...