• 6、Lambda表达式(推荐使用)


    Lambda表达式(匿名的函数对象),是C++11增加的新特性,Qt配合信号一起使用,非常方便。

    pro项目文件中引入了这种特性: CONFIG += c++11

    通过connect来了解Lambda表达式:

    connect(b,&QPushButton::pressed,
                [](){
            qDebug()<<"5.22"; //输出字符串
        });

    [ ]( ){ }替代了原来的调用函数,非常方便。[传入外部对象成员](参数){函数体}

    connect(b,&QPushButton::pressed,
                [b](){ //若不引入对象b,提示b未被捕获。
            b->setText("改变后");
        });

    [=],等号的作用:把所有外部对象、变量(包括头文件中的)以值传递方式引入。即复制

        int a=10,c=100;
        connect(b,&QPushButton::pressed,
                [a,c](){ //若外部对象、变量很多需要引入,用[=],其实就是复制
            qDebug()<<a<<c;
        });

    注意:a、c是只读的,不允许被更改。可用mutable实现更改

        connect(b,&QPushButton::pressed,
                [=]() mutable {
            a=11,c=101;
            qDebug()<<a<<c;
        });

    [this],类中所有成员以值传递方式引入

    [&],外部所有局部变量引入。&是引用符号(此处不是取地址符)。内存被占用时容易出问题,不推荐。

    mywidget.cpp具体代码如下:其他文件原封不动、默认即可。

    /*单击b按钮,输出字符串*/
    #include "mywidget.h"
    #include <QPushButton> //引入按钮
    #include <QDebug> //引入打印
    
    MyWidget::MyWidget(QWidget *parent)
        : QWidget(parent)
    {
        QPushButton *b=new QPushButton(this);
        b->setText("Lambda表达式");
    
        connect(b,&QPushButton::pressed,
                [](){
            qDebug()<<"5.22"; //输出字符串
        });
    }
    
    MyWidget::~MyWidget()
    {
    
    }
    /*单击b按钮,按钮文本被改变*/
    #include "mywidget.h"
    #include <QPushButton> //引入按钮
    #include <QDebug> //引入打印
    
    MyWidget::MyWidget(QWidget *parent)
        : QWidget(parent)
    {
        QPushButton *b=new QPushButton(this);
        b->setText("Lambda表达式");
    
        connect(b,&QPushButton::pressed,
                [b](){ //若不引入对象b,提示b未被捕获。
            b->setText("改变后");
        });
    }
    
    MyWidget::~MyWidget()
    {
    
    }
    #include "mywidget.h"
    #include <QPushButton> //引入按钮
    #include <QDebug> //引入打印
    
    MyWidget::MyWidget(QWidget *parent)
        : QWidget(parent)
    {
        QPushButton *b=new QPushButton(this);
        b->setText("Lambda表达式");
        int a=10,c=100;
        connect(b,&QPushButton::pressed,
                [=]() mutable {
            a=11,c=101;
            qDebug()<<a<<c;
        });
    }
    
    MyWidget::~MyWidget()
    {
    
    }
  • 相关阅读:
    CentOS7 1 安装 ansible
    CentOS7 prometheus +node_exporter+Grafana 配置篇(原创)
    CentOS7 prometheus +node_exporter+Grafana 安装篇
    Oracle 查询重复记录 只保留一条 (转载)
    MySQL 查询重复数据(转载)
    Mongodb 查询重复数据(转载)
    Python报错:pymongo.errors.CursorNotFound: Cursor not found
    百万级高并发MongoDB集群性能数十倍提升优化实践(上篇)
    OPPO百万级高并发mongodb集群性能数十倍提升优化实践(下篇) 转载
    Oracle 常见等待事件及处理方法
  • 原文地址:https://www.cnblogs.com/xixixing/p/10906311.html
Copyright © 2020-2023  润新知