IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 【QT】06 Lambda表达式 -> 正文阅读

[C++知识库]【QT】06 Lambda表达式

??代码资源:https://download.csdn.net/download/qq_36926037/85019729

6.1 基础概念

??C++11中,Lambda表达式用于定义并创建匿名函数对象,以简化编程工作。Lambda表达式的基本构成:
??[ capture ] ( parameters ) mutable ->return-type { statement };
??[ 函数对象参数 ] ( 操作符重载函数参数) mutable ->返回值 { 函数体 };
??参数:
?? (1)函数对象参数[ ]: []标识一个lambda函数的开始,不能省略,函数对象参数是传递给编译器自动生成的函数对象类的构造函数的,函数对象参数只能使用那些定义Lambda为止时Lambda所在作用范围内可见的局部变量(包括Lambda所在类的this),函数对象参数有以下几个形式:
????[ ]:没有使用任何函数对象参数
????[=]:函数体内可以使用函数所在作用域范围内所有可见的局部变量(包括Lambda所在类的this),并且是值传递方式(相当于编译器自动为我们按值传递了所有局部变量)推荐值传递方式
在这里插入图片描述

????[&]: 函数体内可以使用函数所在作用域范围内所有可见的局部变量(包括Lambda所在类的this),并且是引用传递方式(相当于编译器自动为我们按引用传递了所有局部变量)推荐值传递
????[this]:函数体内,可以使用函数所在类中的成员变量
????[a]:将a进行按值传递,并且按值传递时,函数体内不能修改传递进来的a的拷贝,因为默认情况下函数是const的,要修改传递进来的a的拷贝,可以添加mutable修饰符
????[&a]:将a进行按引用传递
????[=,&a]:除了a按引用,其他都是按值
????
??(2) 操作符重载函数参数(): 标识重载的()操作符的参数,没有参数时,这部分可以省略,参数可以通过按值和按引用两种方式进行传递
?? (3)mutible可修改标识符: mutible声明,按值传递函数对象时,加上mutable修饰符后,可以修改按值传递进来的拷贝(注意是修改拷贝,不是值本身)
在这里插入图片描述
??(4)返回值类型(函数返回值): 当返回值为void类型时,或者函数体中只有一处return的地方时,这部分可以省略
在这里插入图片描述
??(5) 函数体 {}: 这部分不可以省略,但是可以为空

6.2 Lambda函数使用案例

??需求:利用Lambda函数表达式,实现点击按钮关闭窗口
??(1)创建项目03qtproject,该项目包含一个窗口,
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
??(2)在窗口的原文件的构造函数中。使用lambda表达式,实现目标
在这里插入图片描述

#include "widget.h"
#include <QPushButton>
#include <QDebug>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    QPushButton *btn1=new QPushButton;
    btn1->setParent(this);
    btn1->setText("第一个按钮");

    QPushButton *btn2=new QPushButton;
    btn2->setParent(this);
    btn2->setText("第二个按钮");
    btn2->move(200,200);

    //lambda函数声明
//    [=](){
//        btn1->setText("改名第一个按钮");
//        btn2->setText("改名第二个按钮");

//    };

    [=](){
        btn1->setText("改名第一个按钮");
        btn2->setText("改名第二个按钮");
    }();

    //mutable关键字
    QPushButton *btn3=new QPushButton;
    btn3->setParent(this);
    btn3->setText("按钮1");
    btn3->move(300,0);

    QPushButton *btn4=new QPushButton;
    btn4->setParent(this);
    btn4->setText("按钮2");
    btn4->move(300,100);
    int a=10;
    connect(btn3,&QPushButton::clicked,this,
            [a]()mutable{a=a+100;qDebug()<<a;});
    connect(btn4,&QPushButton::clicked,this,
            [=](){qDebug()<<a;});
    qDebug()<<a;

    //—>返回值类型
    int b=[]()->int {return 100;}();
    qDebug()<<b;

    //利用lambda函数实现点击按钮关闭窗口
    QPushButton *btn5=new QPushButton;
    btn5->setParent(this);
    btn5->setText("lambda案例");
    btn5->move(500,200);
    connect(btn5,&QPushButton::clicked,this,[=]()
    {
        this->close();
        //关闭窗口的代码,也可以填入槽函数,或者信号等。。。
    });
}

Widget::~Widget()
{
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-24 00:18:35  更:2022-03-24 00:19:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:08:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码