Lambda是C++11的新特性, 首先看看你的.pro项目文件里有没有CONFIG += c++11这句话, 没有就加上.

下面新建一个工程, 具体步骤就不多说了



然后给主窗口添加一个按钮b, 并且包含头文件, 下面要用.



我们先来看一下匿名函数最简单的使用

connect(&b, &QPushButton::clicked,
[] ()
{
qDebug() << "1111";
}
);

之后保存运行, 点击按键会发现, 1111被打印出来了.

这个匿名函数到底是什么东西呢?

[]:

  • 这个方括号是用来传递外部变量的, 因为在匿名函数中是无法使用外部变量的, 只能通过方括号传递给他, 才能捕获到. 比如 我需要使用b这个变量, 只需要在方括号中加入b即可:
    [b] ()
{
}
```
- 但是如果要传的变量很多, 一个个加到方括号里就太麻烦了, 这时我们可以使用 '=', 将外部所有局部变量、类中所有成员以值传递方式传进来: `[=] ()`. 但是通过这种方式传递进来的变量是只读的, 不能修改, 需要在后面加mutable关键字:
```cpp
[=] () mutable
{
}
```
- 使用 this, 可以把类中所有成员以值传递方式传递进来:
```cpp
[this] ()
{
}
```
- 使用 &, 把外部所有局部变量, 通过引用方式传递进来(不推荐, 容易出错)
```cpp
[&] ()
{
}
``` **()**:
- 括号用来接收信号的参数 **{}**:
- 花括号内为匿名函数的逻辑代码. 我们来试一下带参数的用法, `QPushButton::clicked`是带参数`bool checked`的, 它的默认值为false, 鼠标悬停在`QPushButton::clicked`上, 按下F1即可跳转到Qt文档:
![](https://img2018.cnblogs.com/blog/1365872/201908/1365872-20190807213124465-1961868481.png)
我们通过匿名函数来打印这个参数的值:
```cpp
connect(&b, &QPushButton::clicked,
[=] (bool value)
{
qDebug() << value;
}
);

保存后运行, 按下按钮, 输出false:



使用Lambda的方法比之前自己创建槽函数可方便多了!!!

附录

mainwidget.h

#ifndef MAINWIDGET_H
#define MAINWIDGET_H #include <QWidget>
#include <QPushButton>
#include <QDebug> class MainWidget : public QWidget
{
Q_OBJECT public:
MainWidget(QWidget *parent = 0);
~MainWidget(); private:
QPushButton b;
}; #endif // MAINWIDGET_H

mainwidget.cpp

#include "mainwidget.h"

MainWidget::MainWidget(QWidget *parent)
: QWidget(parent)
{
resize(200, 200);
b.setParent(this);
b.setText("按钮");
b.move(50, 50); connect(&b, &QPushButton::clicked,
[=] (bool value)
{
qDebug() << value;
}
);
} MainWidget::~MainWidget()
{ }

此文原创禁止转载,转载文章请联系博主并注明来源和出处,谢谢!

作者: Raina_RLN https://www.cnblogs.com/raina/

Qt5教程: (5) Lambda匿名函数的使用的更多相关文章

  1. python基础-4 函数参数引用、lambda 匿名函数、内置函数、处理文件

    上节课总结 1.三元运算 name=“name1”if 条件 else “name2” 2.深浅拷贝 数字.字符串 深浅,都一样 2.其他 浅拷贝:只拷贝第一层 深拷贝:不拷贝最后一层 3.set集合 ...

  2. lambda匿名函数透析

    lambda匿名函数透析 目录 1       匿名函数的作用... 1 2       匿名函数的格式... 1 3       匿名函数实例代码... 3   1         匿名函数的作用 ...

  3. lambda 匿名函数

    # 普通python函数 def func(a,b,c): return a+b+c print func(1,2,3) # 返回值为6 # lambda匿名函数 f = lambda a,b,c:a ...

  4. lambda 形参:返回值 lambda 匿名函数 格式:

    lambda 匿名函数 格式: lambda 形参:返回值 e.g f = lambda n:n**2 print(f(10))

  5. Python 进阶 之 lambda 匿名函数

    lambda 是个匿名函数,通常用于简单判断或者处理,例如判断一个数的奇偶性,过滤字符串,逻辑运算等等. lambda表达式: >>>lambda x:x*x >>> ...

  6. xpinyin-函数返回多个值-lambda匿名函数-列表生成式-三元表达式

    import xpinyinp=xpinyin.Pinyin() #实例化print(p.get_pinyin('小白','')) 函数返回多个值:1.函数如果返回多个值的话,它会把这几个值放到一个元 ...

  7. lambda匿名函数和他的小伙伴(处理大量数据的时候用到)

    lambda匿名函数 主要是为了解决一些简单的需求而设计的一句话函数 #计算n的n次方 def func(n): return n**n f = lambda n : n ** n 语法: 函数名 = ...

  8. lambda匿名函数,sorted(),filter(),map(),递归函数

    1.lambda匿名函数 为了解决一些简单的需求而设计的一句话函数 #计算n的n次方 def func(n): return n**n print(func(10)) f = lambda n: n* ...

  9. Python 之父为什么嫌弃 lambda 匿名函数?

    Python 支持 lambda 匿名函数,其扩展的 BNF 表示法是lambda_expr ::= "lambda" [parameter_list] ":" ...

随机推荐

  1. 记一次oracle新建用户及分配指定表权限的操作记录

    1.登录 2.创建用户create user new用户名 identified by new用户名创建new用户名用户,密码设置为new用户名. 3.授权new用户名用户的连接.资源权限.grant ...

  2. 松软科技课堂:数据库-主键(PrimaryKey)

    主键就是一个表中每个数据行的唯一标识.不会有重复值的列才能当主键.一个表可以没有主键,但是会非常难以处理,因此没有特殊理由表都要设定主键 主键有两种选用策略:业务主键和逻辑主键.业务主键是使用有业务意 ...

  3. input和btton的相互使用————小程序

    input和btton的相互使用----小程序 index.js data: { userxx:'1111', }, changeSum(){ // this.data.userxx="ch ...

  4. IDEA远程debug线上项目(实操版)

    # 1.在服务器上 tomcat 的 bin目录下找到并打开 catalina.sh 在文件中搜索: ``` JPDA_ADDRESS= ``` 找一个服务器上没有被使用的端口,填入,如50005,保 ...

  5. kubernetes实战(二十六):kubeadm 安装 高可用 k8s v1.16.x dashboard 2.x

    1.基本配置 基本配置.内核升级.基本服务安装参考https://www.cnblogs.com/dukuan/p/10278637.html,或者参考<再也不踩坑的Kubernetes实战指南 ...

  6. ASP.NET Core 3.0 : 二十四. 配置的Options模式

    上一章讲到了配置的用法及内部处理机制,对于配置,ASP.NET Core还提供了一种Options模式.(ASP.NET Core 系列目录) 一.Options的使用 上一章有个配置的绑定的例子,可 ...

  7. asp.net core IdentityServer4 实现 Client credentials(客户端凭证)

    前言 OAuth 2.0默认四种授权模式(GrantType) 授权码模式(authorization_code) 简化模式(implicit) 密码模式(resource owner passwor ...

  8. SVN更改地址

    因为服务器更改或其他某些原因导致svn地址改变,那么本地应该如何操作tortoiseSVN?如何成功的把项目进行迁移? 操作步骤 1.右击项目目录---TortoiseSVN----重新定位(英文版是 ...

  9. (2)安装elastic6.1.3及插件kibana,x-pack,essql,head,bigdesk,cerebro,ik

    5.2kibana安装 5.2.1解压kibana安装包,修改config/kibana.yml中端口,服务器地址,elastic连接地址 -linux-x86_64.tar.gz cd kibana ...

  10. Spring Boot 2.x基础教程:构建RESTful API与单元测试

    首先,回顾并详细说明一下在快速入门中使用的@Controller.@RestController.@RequestMapping注解.如果您对Spring MVC不熟悉并且还没有尝试过快速入门案例,建 ...