zoukankan      html  css  js  c++  java
  • 拉姆达Lambda表达式以及Qt使用

    0、概述
    格式:[capture](parameters) mutable ->return-type{statement}

    1、简单格式

    auto f = [] {
    
        std::cout << "this is lambda" <<std::endl;
    }
    f();

    2、直接调用

    [] {
    
        std::cout << "this is lambda" <<std::endl;
    } ();

    3、带参数

    auto f = [] (const std::string& s){
    
        std::cout << "this is lambda :" << s <<std::endl;
    }
    f("Im lambda.");

    4、带返回值

    [] {
    
        return 100;//未指定返回类型,这里默认为100
    }
    f();

    5、指定返回类型

    auto f = [] () -> double {
    
        return 100;
    }
    f();

    6、访问外部作用域

    int x=100;
    int y=200;
    auto f = [x,&y] {
        ++x;//x是值传递,不能这样,编译不过
        ++y;//y是引用传递,可以这样
    }
    x++,y++; f();

    只有引用传递才能在lambda表达式中修改值,比如最后y=202;如果是值传递,那么表达式之中的x的初始值就是表达式定义时的值=100

    7、可以改变值传递的值

    int x=100;
    auto f = [x]() mutable {
        ++x;//x是值传递,但是可以这样写
    }
    f();

    8、QTimer使用

    QTimer::singleShot(VALUE_300,NULL,[=]()

    {

      updateSlot(SQL_CODE_12);

    });

    []代表这是拉姆达函数,=代表是值传递,()代表入参这里没有,{}是函数体

    9、按钮使用【有信号发送者也有信号接收者】

    QDialog* log = new QDialog(this);
    QPushButton* okBtn = new QPushButton(log);
    QHBoxLayout* hLayout = new QHBoxLayout();
    hLayout->addWidget(okBtn);
    log->setLayout(hLayout);
    QObject::connect(okBtn, &QPushButton::clicked,log,[=]()
    {
          log->done(1);
    });
    if(1==log->exec())
    {
        //...
    }

    注意核心就是不要写SIGNAL和SLOT,用对象类名表示

    1).[var]表示值传递方式捕捉变量var;
    2).[=]表示值传递方式捕捉所有父作用域的变量(包括this);
    3).[&var]表示引用传递捕捉变量var;
    4).[&]表示引用传递方式捕捉所有父作用域的变量(包括this);
    5).[this]表示值传递方式捕捉当前的this指针。

    10、QComboBox使用【有信号发送没有接收】

    connect(box,&QComboBox::currentTextChanged,[](QString){});

    注意这个信号必须是非重载的,否则会报错

    10、Qt connect连接信号如果时重载需要转化

    connect(box,static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged),[](int){});

    参考:https://www.cnblogs.com/rainbow70626/p/10328143.html

  • 相关阅读:
    标题党的进步:道字大旗不再扯,美为号召又开张
    dwr自动生成的js文件到底在哪里?
    JavaScript全局优化带来的负面效果……
    内训资料公开:设计师的实战过程(1)
    元语言基础技术之:在JS中如何自由地创建函数
    QoBean的元语言系统(一)
    Oracle面向服务的架构
    对JavaScript的eval()中使用函数的进一步讨论~
    KEGG and Gene Ontology Mapping in Bioinformatic Method
    mysql user administration
  • 原文地址:https://www.cnblogs.com/judes/p/11066646.html
Copyright © 2011-2022 走看看