有几个地方要注意的:

[]这个表示Lambda的开始,如果要加参数可以这样:[]()后面括号里面放参数,Qt中connect中的信号,参数

1. []:里面为空,表示不使用任何参数对象的参数;

2. =:表示按值的方式进行传递;

3. &:表示以引用的方式进行传递;

4. this:表示函数体内可以使用Lambda所在类中的成员变量;

5. a:按值的方式进行传递,默认是不能修改的,如果要修改,需要添加mutable修饰符。

程序结构如下:

如下代码:

LambdaInQt.pro

QT -= guiCONFIG += c++11 console
CONFIG -= app_bundle# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0SOURCES += \main.cpp# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += targetHEADERS += \Test.h

Test.h

#ifndef TEST_H
#define TEST_H#include <QObject>
#include <QTimer>
#include <QDebug>class Test1{public:Test1(){}Test1(const Test1 &test){this->m_a = test.m_a;}Test1 &operator = (const Test1 &test){this->m_a = test.m_a;}int m_a;
};class Test2{public:int m_a;
};class MyEmit : public QObject{Q_OBJECTpublic:MyEmit() : QObject(nullptr){QTimer::singleShot(1000, [this](){this->m_test1.m_a = 10;this->m_test2.m_a = 20;});Test1 tmpTest1;tmpTest1.m_a = 100;QTimer::singleShot(1000, [=](){this->m_a = 100;this->m_test1.m_a = 100;});QTimer::singleShot(1000, [&](){this->m_a = 100;tmpTest1.m_a = 300;});int tmpa = 100;QTimer::singleShot(1000, [tmpa](){qDebug() << tmpa;});QTimer::singleShot(1000, [tmpTest1](){qDebug() << tmpTest1.m_a;});}signals:void sendSomeThing();void sendToDoSomeThing();private:int m_a;int m_b;Test1 m_test1;Test2 m_test2;
};#endif // TEST_H

main.cpp

#include <QCoreApplication>
#include <QDebug>
#include <QTimer>
#include "Test.h"int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);MyEmit myEmit;QTimer::singleShot(3000, [&]{emit myEmit.sendSomeThing();});QEventLoop loop;QObject::connect(&myEmit, &MyEmit::sendSomeThing, [=](){});loop.exec();qDebug() << "over";return a.exec();
}

C++笔记-Qt中使用Lambda时[]中的形式相关推荐

  1. java8 nullpoint_仅当在Java8中使用lambda时不为null时才过滤值

    我有一个对象列表说汽车.我想基于使用Java 8的一些参数来过滤此列表.但是如果参数为null,则抛出NullPointerException.如何过滤掉空值? 目前的代码如下 requiredCar ...

  2. lambda 表达式中的 this 与普通情况下的 this 指向

    lambda 表达式中的 this 与普通情况下的 this 指向 Java JavaScript this 绑定 总结与提醒   很多编程语言都支持 lambda 表达式,不过对于不同编程语言,其 ...

  3. 应用笔记-Qt 程序中使用 Live 20R 指纹采集器

    应用笔记-Qt 程序中使用 Live 20R 指纹采集器 最近一个项目需要用到指纹认证.就在某东上随便搜了个销量比较大的指纹采集器,就是今天这个笔记的主角(Live 20R 指纹采集器).花了几天时间 ...

  4. java lambda函数_最常用的 Java 8 中的 Lambda 函数(项目中实用笔记)

    最常用的 Java 8 中的 Lambda 函数(项目中实用笔记) 简介 Java 8 中的新特性,虽然现在都出到了Java14版本,不过在日常的开发过程中,8的版本是足够使用了,再说现在的8以上的版 ...

  5. lambda qt 参数 槽函数_C++中的lambda表达式用法

    #include <QCoreApplication> #include <QDebug> int main(int argc, char *argv[]) {QCoreApp ...

  6. qt程序卡死 linux,QtCreator中打开.ui文件时卡死崩溃的解决方法

    用Java实现单链表的基本操作 笔试题中经常遇到单链表的考题,下面用java总结一下单链表的基本操作,包括添加删除节点,以及链表转置. package mars; //单链表添加,删除节点 publi ...

  7. java8中的lambda表达式实用详解

    java8中的lambda表达式实用详解 1. lambda简介 ​ Lambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中 ...

  8. Qt5中使用lambda表达式

    c11新特性中加入了lambda表达式,所以Qt 也支持 需在.pro文件中加入 CONFIG += c++11例子: 1 QString program = "C:/Windows/Sys ...

  9. 学习笔记(一):Java中Stream的基本用法和相关API详解

    目录 引言 一.什么是Stream 二.Stream有什么用 三.Stream的分类 四.常用的Stream创建方法 1. Stream.of()方法 2. Arrays.stream() 3. 集合 ...

最新文章

  1. Windows系统IntelliJ IDEA安装配置
  2. More Effective C++ (运算符)
  3. NumPy Cookbook 带注释源码 二、NumPy 高级索引和数组概念
  4. Error in moviepy setup command: 'extras_require' must be a dictionary whose values are strings or li
  5. 【深度学习】全连接层or卷积层
  6. mysql 练习题网站_mysql练习题
  7. 抓包安卓7以上ca证书安装方法
  8. ubuntu18.04打不开网易云音乐
  9. Android工程师进阶第五课 多线程锁,线程池和DVM/ART优化
  10. C++ 多种取整函数的使用和区别: ceil() floor() round() trunc() rint() nearbyint()
  11. JVM 1.8 永久代---元空间 的变动
  12. JAVA编写Word
  13. [HDCTF2019]bbbbbbrsa
  14. 【ICPR 2021】遥感图中的密集小目标检测:Tiny Object Detection in Aerial Images
  15. LVS的Tun模式(隧道模式)的实现
  16. 验证证书链 java_java实现证书链和签名验证
  17. 各种输入方法总结(C++)
  18. 【RC延迟电路与快速泄放电路】 multisim 14.0仿真 RC延迟电路与快速泄放电路
  19. 机器学习/数据挖掘之中国大牛
  20. 【MES系统】这个表格让您秒懂MES制造执行系统与ERP企业管理系统的区别及联系...

热门文章

  1. cocos2d-x 之 CCProgressTimer
  2. JQuery元素操小结
  3. 各种网络模拟器的下载链接
  4. 有关于婚姻经济学的经典对话
  5. 套用这8种数据治理方法,解决90%的数据治理问题
  6. 正在这紧要关头的jdzyzwc
  7. 让我们拭目以待的jinbiguandan
  8. 在Visual C++中用ADO进行数据库编程(中)
  9. 【第2波】有些话,适合在朋友圈说
  10. 微软TypeScript 3.0重磅发布!扶我起来,我还学得动