【QT】QT中使用Lambda表达式

简介: 【QT】QT中使用Lambda表达式

Lambda表达式

Qt5中有全新的信号与槽语法,在Qt4基础上提高了信号与槽的灵活性,允许使用任意函数作为槽函数。但如果想更好地执行异步代码,来函数名都不想定义,则可以通过Lambda表达式来达到这个目的。

Lambda表达式是C++11新增加的特性。

Lambda表达式的引入符

引入符 说明
[] 不捕获任何变量
[=] 以传值的方式捕获所有外部变量
[&] 以传引用的方式捕获所有外部变量
[x,&y] x以传值的方式捕获,y以传引用的方式捕获
[=,&x] x以传引用的方式捕获,其余变量以传值的方式捕获
[&,x] x以传值的方式捕获,其余变量以传引用的方式捕获

格式:

[捕获列表] (参数列表-可以省略) (函数选项-可以省略) -> (返回值类型-可以省略){函数体}

详见—链接

示例1:

收到拒绝文件信号,执行的槽方法功能就是直接返回,没有进行任何的外部变量捕获。

connect(recvFile,&ReceiveFile::refuseFile(),[](){
     return;
 });

示例2:

传值方式捕获外部变量在函数体内部使用

connect(label,&QClickLabel::clicked,[row,column,colorList]{
    NotifyManager::getInstance()->notifyOtherWindowChangeSkin(colorList.at(row *4 +column));
})

示例3:
传址方式捕获

使用this的updateSearchStyle()成员函数

connect(NotifyManager::getInstance(), &NotifyManager::signalSkinChanged,[this]() {
        updateSearchStyle();
});

注意事项:
捕获列表不允许变量重复传递,如[=,a]则以传值方式捕获所有外部变量,又重复捕获a,就会报错。

相关文章
|
5天前
|
安全 编译器 开发者
【Qt 学习笔记】Qt信号和槽的其他说明及Lambda表达式
【Qt 学习笔记】Qt信号和槽的其他说明及Lambda表达式
39 0
|
6月前
|
编译器
13 QT - Lambda表达式
13 QT - Lambda表达式
22 0
|
编译器
Qt 5——Lambda表达式
Qt 5——Lambda表达式
105 0
Qt 5 最新信号和槽连接方式以及Lambda表达式
最近学习Qt,发现新大陆,这里做下记录。
241 0
Qt 5 最新信号和槽连接方式以及Lambda表达式
|
5天前
|
算法 编译器 Linux
【Qt4 部署】ARM系统上使用Qt 4 进行开发的QWS 等环境变量部署
【Qt4 部署】ARM系统上使用Qt 4 进行开发的QWS 等环境变量部署
30 0
|
5天前
|
网络协议 C++
C++ Qt开发:QTcpSocket网络通信组件
`QTcpSocket`和`QTcpServer`是Qt中用于实现基于TCP(Transmission Control Protocol)通信的两个关键类。TCP是一种面向连接的协议,它提供可靠的、双向的、面向字节流的通信。这两个类允许Qt应用程序在网络上建立客户端和服务器之间的连接。Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用`QTcpSocket`组件实现基于TCP的网络通信功能。
49 8
C++ Qt开发:QTcpSocket网络通信组件
|
5天前
|
区块链
【qt】最快的开发界面效率——混合编程3
【qt】最快的开发界面效率——混合编程
16 1
|
5天前
【qt】最快的开发界面效率——混合编程2
【qt】最快的开发界面效率——混合编程
14 1
|
5天前
【qt】最快的开发界面效率——混合编程1
【qt】最快的开发界面效率——混合编程
18 0
|
5天前
|
开发框架 编译器 C++
Qt:一个强大的跨平台C++应用程序开发框架
Qt:一个强大的跨平台C++应用程序开发框架
37 1

推荐镜像

更多