QT基础-lambda表达式

参考Qt学习笔记(三):lambda 表达式

值、引用、this传递

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QPushButton>
#include <QDebug>
QT_BEGIN_NAMESPACE
namespace Ui {
    
     class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    
    
    Q_OBJECT

public:
    int b;
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    QPushButton *btn;
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    
    
    b = 20;
    int aa = 10;
    ui->setupUi(this);
    btn = new QPushButton();
    btn->setParent(this);
    btn->move(40,50);
    btn->resize(140,150);
    btn->setText("新年好");
    // [=] 表示 lambda表达式内部可以获取外部所有局部变量,
    // 以及类中所有的成员的值;

    connect(btn,&QPushButton::clicked,this,[=]{
    
    
        qDebug()<<"新年好啊";
        btn->setText("虎虎生威");
        // [this]时,aa是局部变量,不会被传入
        // [&]时,会将外部局部变量以'引用'的方式传入,
        // [&]时,类中成员不会传入
        qDebug()<<aa;
        // [this]将类中一切成员传入,局部变量不会传入
        qDebug()<<b;
    });
}

MainWindow::~MainWindow()
{
    
    
    delete ui;
}

值传递较为常用([=])

mutable关键字的作用

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    
    
    b = 20;
    int aa = 10;
    ui->setupUi(this);
    btn = new QPushButton();
    btn->setParent(this);
    btn->move(40,50);
    btn->resize(140,150);
    btn->setText("新年好");
    // mutable关键字可以对外部传入的变量进行修改
    // 没有mutable只可读
    // isChecked是clicked信号的一个参数,默认值为false
    connect(btn,&QPushButton::clicked,this,
            [=](bool isChecked)mutable{
    
    
        qDebug()<<"isChecked:"<<isChecked;
        aa = 30;
        b = 50;
    });

}

MainWindow::~MainWindow()
{
    
    
    delete ui;
}

lambda的->return-type用法

mainwidonw.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    
    
    b = 20;
    int aa = 10;
    ui->setupUi(this);
    btn = new QPushButton();
    btn->setParent(this);
    btn->move(40,50);
    btn->resize(140,150);
    btn->setText("新年好");
    //外部定义匿名函数,将返回值传递出去
    auto func = [=]()mutable ->int{
    
    
        aa+=10;
        return aa;
    };
    connect(btn,&QPushButton::clicked,this,
            [=]()mutable{
    
    
        int result = func();
        qDebug()<<"change_aa:"<<result;
    });
    qDebug()<<"unchange_aa:"<<aa;
}

MainWindow::~MainWindow()
{
    
    
    delete ui;
}

猜你喜欢

转载自blog.csdn.net/qq_35140742/article/details/122763501