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()
    {
    
    }
  • 相关阅读:
    C#截取字符串的方法小结
    使用苏飞httphelper开发自动更新发布文章程序
    公务员“上班睡觉”为何会被强势围观?
    透明代理和匿名代理的区别
    Linux基础命令---ipcalc计算IP
    Linux基础命令---apwatch
    Linux基础命令---arping
    Linux基础命令---arp
    Linux基础命令---ifdown、ifup
    Linux基础命令---ifconfig
  • 原文地址:https://www.cnblogs.com/xixixing/p/10906311.html
Copyright © 2011-2022 走看看