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;
}