Qt5教程: (5) Lambda匿名函数的使用
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匿名函数的使用的更多相关文章
- python基础-4 函数参数引用、lambda 匿名函数、内置函数、处理文件
上节课总结 1.三元运算 name=“name1”if 条件 else “name2” 2.深浅拷贝 数字.字符串 深浅,都一样 2.其他 浅拷贝:只拷贝第一层 深拷贝:不拷贝最后一层 3.set集合 ...
- lambda匿名函数透析
lambda匿名函数透析 目录 1 匿名函数的作用... 1 2 匿名函数的格式... 1 3 匿名函数实例代码... 3 1 匿名函数的作用 ...
- lambda 匿名函数
# 普通python函数 def func(a,b,c): return a+b+c print func(1,2,3) # 返回值为6 # lambda匿名函数 f = lambda a,b,c:a ...
- lambda 形参:返回值 lambda 匿名函数 格式:
lambda 匿名函数 格式: lambda 形参:返回值 e.g f = lambda n:n**2 print(f(10))
- Python 进阶 之 lambda 匿名函数
lambda 是个匿名函数,通常用于简单判断或者处理,例如判断一个数的奇偶性,过滤字符串,逻辑运算等等. lambda表达式: >>>lambda x:x*x >>> ...
- xpinyin-函数返回多个值-lambda匿名函数-列表生成式-三元表达式
import xpinyinp=xpinyin.Pinyin() #实例化print(p.get_pinyin('小白','')) 函数返回多个值:1.函数如果返回多个值的话,它会把这几个值放到一个元 ...
- lambda匿名函数和他的小伙伴(处理大量数据的时候用到)
lambda匿名函数 主要是为了解决一些简单的需求而设计的一句话函数 #计算n的n次方 def func(n): return n**n f = lambda n : n ** n 语法: 函数名 = ...
- lambda匿名函数,sorted(),filter(),map(),递归函数
1.lambda匿名函数 为了解决一些简单的需求而设计的一句话函数 #计算n的n次方 def func(n): return n**n print(func(10)) f = lambda n: n* ...
- Python 之父为什么嫌弃 lambda 匿名函数?
Python 支持 lambda 匿名函数,其扩展的 BNF 表示法是lambda_expr ::= "lambda" [parameter_list] ":" ...
随机推荐
- 关于svn更新失败,clearup异常解决
直接上主题: 1. 下载sqlite3工具(https://files.cnblogs.com/files/eric-fang/sqlite-tools-win32-x86-3210000.zip), ...
- java中String常见问题
java中String常见问题 1.字符串比较==和equals ==:比较的是对象,判断两个引用的是否为同一内存地址(物理对象) equals:比较的是值 2.通过空白字符拆封字符串 str.spi ...
- 【linux】linux固定ip
vi /etc/sysconfig/network-scripts/ifcfg-ens33 ifcfg-ens33为ifconfig显示的网卡名 TYPE="Ethernet"P ...
- MySQL之增删改查之
MySQL之增删改查 前言:以下是MySQL最基本的增删改查语句,很多IT工作者都必须要会的命令,也是IT行业面试最常考的知识点,由于是入门级基础命令,所有所有操作都建立在单表上,未涉及多表操作. ...
- Python网络爬虫实战(五)批量下载B站收藏夹视频
我们除了爬取文本信息,有的时候还需要爬媒体信息,比如视频图片音乐等.就拿B站来说,我的收藏夹内的视频可能随时会失效,所以把它们下载到本地是非常保险的一件事. 对于这种大量列表型的数据,可以猜测B站收藏 ...
- Wordpress设置Pretty Permalink的方法
设置Wordpress的Pretty Permalink的关键点莫过于下面几点(本文是基于Apache httpd服务器). 1.Apache httpd要有rewrite module 在httpd ...
- 调试 内存查看StringCchCopy的运行前后
// ConsoleApplication1.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" int _tmain(int argc, _T ...
- <q> 与 <blockquote> 的区别
<q> 标签在本质上与 <blockquote> 是一样的.不同之处在于它们的显示和应用.<q> 标签用于简短的行内引用.如果需要从周围内容分离出来比较长的部分(通 ...
- Jquery Validate 相关参数及常用的自定义验证规则
一.官网地址:http://bassistance.de/jquery-plugins/jquery-plugin-validation 二.默认校验规则 1 2 3 4 5 6 7 8 9 10 1 ...
- .net core 3.0 Signalr - 03 使用MessagePack压缩传输内容
## MessagePack基础介绍 Signalr默认使用的是json形式传递数据,但是signalr提供了灵活的扩展,支持MessagePack形式序列化数据,以增加性能降低网络传输的效果,极大的 ...