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()
    {
    
    }
  • 相关阅读:
    【Silverlight】Bing Maps学习系列(八):使用Bing Maps Silverlight Control加载自己部署的Google Maps
    Visual Studio 2010在简洁中强调团队合作
    【Silverlight】Bing Maps学习系列(九):自定义功能导航条(Custom NavigationBar)
    Flash OBJECT 和 EMBED 标签
    SWFObject 的原站提供的使用说明
    一篇清楚阐述 JAvaScript 传递数据 到 Flash 的文章
    Flare 的 Edge边上加 Label
    借助 SWFObject 实现利用JavaScript嵌入 Flash
    3种基本的Flash/Javascript通信方式 (转)
    passing data from HTML to Flash
  • 原文地址:https://www.cnblogs.com/xixixing/p/10906311.html
Copyright © 2011-2022 走看看