首页 > 分享 > Qt基础 Lambda表达式

Qt基础 Lambda表达式

根据B站《最新QT从入门到实战完整版|传智教育》学习的,BV号:BV1g4411H78N

Lambda表达式

[ ]标识符,匿名函数,[ ]( ){ }

1.= 值传递

2.& 引用传递

3.( )参数

4.{ }实现体

5.mutable修饰值传递变量,可以修改拷贝出的数据,改变不了本体

6.返回值 [ ]( )->返回值类型{ }

7.调用函数 [ ]( ){ }( );

Lambda表达式最常用  [=]( ){ }

案例

widget.cpp:其余代码看前面的文章!

#include "widget.h"

#include "ui_widget.h"

#include<QPushButton>

#include<QDebug>

//Teacher类 老师类

//Student类 学生类

//下课后,老师会触发一个信号“饿了”,学生响应信号然后“请客吃饭”

Widget::Widget(QWidget *parent)

: QWidget(parent)

, ui(new Ui::Widget)

{

ui->setupUi(this);

//创建一个老师对象

this->t = new Teacher(this);

//创建一个学生对象

this->st = new Student(this);

//连接不带参数的信号和槽

// //老师饿了学生请客的连接

// connect(t,&Teacher::hungry,st,&Student::treat);

// //调用下课函数

// ClassIsOver();

//连接带参数的信号和槽

//指针 -> 地址

//函数指针 -> 函数地址

void(Teacher:: * teacherSignal)(QString) = &Teacher::hungry; //定义函数指针

void(Student:: * studentSlot)(QString) = &Student::treat;

connect(t,teacherSignal,st,studentSlot);

//ClassIsOver();

//点击下课按钮再触发下课

QPushButton * btn = new QPushButton("下课",this);

//重置窗口大小

this->resize(600,400);

//点击按钮,触发下课

//connect(btn,&QPushButton::clicked,this,&Widget::ClassIsOver);

//无参信号和槽连接

void(Teacher:: * teacherSignal2)(void) = &Teacher::hungry;

void(Student:: * studentSlot2)(void) = &Student::treat;

connect(t,teacherSignal2,st,studentSlot2);

//信号连接信号

connect(btn,&QPushButton::clicked,t,teacherSignal2);

//断开信号

//disconnect(t,teacherSignal2,st,studentSlot2);

//拓展

//1.信号是可以连接信号的

//2.一个信号可以连接多个槽函数

//3.多个信号可以连接同一个槽函数

//4.信号和槽的参数类型必须一一对应

//5.信号的参数个数可以多于槽函数的参数个数

//Qt4版本以前的信号和槽的连接方式

//利用Qt4信号槽,连接无参版本

//Qt4版本 底层SIGNAL("hungry") SLOT("treat")

//connect(t,SIGNAL(hungry()),st,SLOT(treat()));

//Qt4版本优点:参数直观 缺点:类型不做检测

//lambda表达式

//中括号中的 = 为值传递,包含局部变量中的所有变量,包括所在类的this

//中括号中的 & 为引用传递

// [=](){

// btn->setText("aaaa");

// }();

//只包含stn(空括号中的变量)

// QPushButton * btn2 = new QPushButton;

// [stn](){

// btn->setText("aaa");

// btn2->setText("bbbb"); //btn2看不到

// }

//mutable关键字,用于修饰值传递的变量,修改的是拷贝,而不是本体

// QPushButton * myBtn = new QPushButton(this);

// QPushButton * myBtn2 = new QPushButton(this);

// myBtn2->move(100,100);

// int m = 10;

// connect(myBtn,&QPushButton::clicked,this,[m]()mutable{m = 100 + 10; qDebug() << m;});

// connect(myBtn2,&QPushButton::clicked,this,[=](){ qDebug() << m;});

// qDebug() << m;

// int ret = []()->int{return 1000;}();

// qDebug() << "ret = " << ret;

//利用lambda表达式,实现点击窗口关闭窗口

QPushButton * btn2 = new QPushButton;

btn2->move(100,0);

btn2->setText("关闭");

btn2->setParent(this);

connect(btn2,&QPushButton::clicked,this,[=](){ //第三个参数是this的话可以省略掉

// this->close();

// emit t->hungry("宫保鸡丁");

btn2->setText("aaa");

});

//lambda表达式最常用[=](){}

}

void Widget::ClassIsOver()

{

//下课函数,调用后触发老师饿了的信号

//emit t->hungry();

emit t->hungry("宫保鸡丁");

}

Widget::~Widget()

{

delete ui;

}

相关知识

Kotlin 学习笔记 (九) 可怕的 lambda 及 高级函数
lamda表达式 Dispatcher.BeginInvoke(() =>
【QT教程】QT6 Web开发入门 QT Web
Qt
【Qt】QTest:编译Qt单元测试程序
小括号与花括号小括号与花括号
请问大家QT如何显示思源黑体 !嵌入式QT
Qt 查询字符串数据
keras中Lambda层的使用
MOOC —— Python语言基础与应用 by 北京大学 第六章 计算和控制流(二)

网址: Qt基础 Lambda表达式 https://m.huajiangbk.com/newsview1228949.html

所属分类:花卉
上一篇: Systrace 之 CPU i
下一篇: 周末赏花走起!成都龙泉山桃花开啦