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() { }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界