zoukankan      html  css  js  c++  java
  • 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()
    {
    
    }
  • 相关阅读:
    JavaScript 检测浏览器更多信息【每日一段代码66】
    JavaScript throw 声明【每日一段代码64】
    JavaScript 计时器2 【每日一段代码73】
    JavaScript 按钮动画【每日一段代码70】
    JavaScript 检测浏览器【每日一段代码67】
    JavaScript 使用计时事件制作的钟表 【每日一段代码76】
    一个实现恢复删除机制(do undo)的设计
    基于邻接表的广度优先搜索遍历
    HDU1045 Fire Net
    深度遍历
  • 原文地址:https://www.cnblogs.com/xixixing/p/10906311.html
Copyright © 2011-2022 走看看