C++笔记-Qt中使用Lambda时[]中的形式
有几个地方要注意的:
[]这个表示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时[]中的形式相关推荐
- java8 nullpoint_仅当在Java8中使用lambda时不为null时才过滤值
我有一个对象列表说汽车.我想基于使用Java 8的一些参数来过滤此列表.但是如果参数为null,则抛出NullPointerException.如何过滤掉空值? 目前的代码如下 requiredCar ...
- lambda 表达式中的 this 与普通情况下的 this 指向
lambda 表达式中的 this 与普通情况下的 this 指向 Java JavaScript this 绑定 总结与提醒 很多编程语言都支持 lambda 表达式,不过对于不同编程语言,其 ...
- 应用笔记-Qt 程序中使用 Live 20R 指纹采集器
应用笔记-Qt 程序中使用 Live 20R 指纹采集器 最近一个项目需要用到指纹认证.就在某东上随便搜了个销量比较大的指纹采集器,就是今天这个笔记的主角(Live 20R 指纹采集器).花了几天时间 ...
- java lambda函数_最常用的 Java 8 中的 Lambda 函数(项目中实用笔记)
最常用的 Java 8 中的 Lambda 函数(项目中实用笔记) 简介 Java 8 中的新特性,虽然现在都出到了Java14版本,不过在日常的开发过程中,8的版本是足够使用了,再说现在的8以上的版 ...
- lambda qt 参数 槽函数_C++中的lambda表达式用法
#include <QCoreApplication> #include <QDebug> int main(int argc, char *argv[]) {QCoreApp ...
- qt程序卡死 linux,QtCreator中打开.ui文件时卡死崩溃的解决方法
用Java实现单链表的基本操作 笔试题中经常遇到单链表的考题,下面用java总结一下单链表的基本操作,包括添加删除节点,以及链表转置. package mars; //单链表添加,删除节点 publi ...
- java8中的lambda表达式实用详解
java8中的lambda表达式实用详解 1. lambda简介 Lambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中 ...
- Qt5中使用lambda表达式
c11新特性中加入了lambda表达式,所以Qt 也支持 需在.pro文件中加入 CONFIG += c++11例子: 1 QString program = "C:/Windows/Sys ...
- 学习笔记(一):Java中Stream的基本用法和相关API详解
目录 引言 一.什么是Stream 二.Stream有什么用 三.Stream的分类 四.常用的Stream创建方法 1. Stream.of()方法 2. Arrays.stream() 3. 集合 ...
最新文章
- Windows系统IntelliJ IDEA安装配置
- More Effective C++ (运算符)
- NumPy Cookbook 带注释源码 二、NumPy 高级索引和数组概念
- Error in moviepy setup command: 'extras_require' must be a dictionary whose values are strings or li
- 【深度学习】全连接层or卷积层
- mysql 练习题网站_mysql练习题
- 抓包安卓7以上ca证书安装方法
- ubuntu18.04打不开网易云音乐
- Android工程师进阶第五课 多线程锁,线程池和DVM/ART优化
- C++ 多种取整函数的使用和区别: ceil() floor() round() trunc() rint() nearbyint()
- JVM 1.8 永久代---元空间 的变动
- JAVA编写Word
- [HDCTF2019]bbbbbbrsa
- 【ICPR 2021】遥感图中的密集小目标检测:Tiny Object Detection in Aerial Images
- LVS的Tun模式(隧道模式)的实现
- 验证证书链 java_java实现证书链和签名验证
- 各种输入方法总结(C++)
- 【RC延迟电路与快速泄放电路】 multisim 14.0仿真 RC延迟电路与快速泄放电路
- 机器学习/数据挖掘之中国大牛
- 【MES系统】这个表格让您秒懂MES制造执行系统与ERP企业管理系统的区别及联系...