当前位置: 首页 > news >正文

信号和槽(4)

信号和槽(4)

定义槽函数的时候,也是可以使用lambda表达式的

lambda表达式很多编程语言都支持,属于是“语法糖”

lambda表达式的本质:“匿名函数”,主要应用在“回调函数”的场景,一次性使用

可能会存在的问题如下:

connect(button,&QPushButton::clicked,this,[](){qDebug()<<"lambda表达式被执行";button->move();
})

lambda是回调函数,无法直接获取到上层作用域中的变量

lambda为了解决上述问题,引入“变量捕获”语法,通过这个,获取到外层作用域的变量

解决方案如下:

connect(button,&QPushButton::clicked,this,[button,this](){qDebug()<<"lambda表达式被执行";button->move(300,300);this->move(100,100);
})

如果当前lambda里面想要使用更多的外层变量咋办?

解决方案如下:

connect(button,&QPushButton::clicked,this,[=](){qDebug()<<"lambda表达式被执行";button->move(300,300);this->move(100,100);
})

[=]是把上层作用域所有的变量的变量名都进行捕获

应用场景:如果对应的槽函数比较简答,而且是一次性使用的,可以这么写

注意点:

需要确认lambda内部的变量是有意义的

QPushButton*button=new QPushButton(this);

这个变量是new出来的,生命周期跟随整个窗口(挂到对象树上,窗口关闭才会释放)

lambda表达式也可以引用(&)的方式捕获,这个很少用到,用到的时候就需要关注生命周期

lambda表达式的语法是C++11才引入的,对于QT5及其更高的版本,默认是按照C++11的语法进行编译

对于使用QT4或者更老版本需要在.pro文件中手动添加上C++11的编译选项

,默认是按照C++11的语法进行编译

对于使用QT4或者更老版本需要在.pro文件中手动添加上C++11的编译选项

在这里插入图片描述

http://www.dtcms.com/a/267705.html

相关文章:

  • 3dmax物理材质转换标准材质,物理材质转VR材质,VR材质转标准材质3dmax物理材质转标准材质插件
  • 98.验证二叉搜索树
  • python实现简单的地图绘制与标记20250705
  • 【每天一个知识点】子空间聚类(Subspace Clustering)
  • 零基础保姆级本地化部署文心大模型4.5开源系列
  • Unity文件夹标签 —— FolderTag
  • SpinLock (TTAS) C-A-S 自旋锁实现原理
  • 人工智能学习60-Yolo
  • TCP协议概念和特性
  • cmd 的sftp传输;Conda出现环境问题: error: invalid value for --gpu-architecture (-arch)
  • Kotlin 协程:Channel 与 Flow 深度对比及 Channel 使用指南
  • 《自然语言处理:基于预训练模型的方法》-笔记
  • Java教程——深入学习guava之并发编程
  • 基于matlab的二连杆机械臂PD控制的仿真
  • 2025年5月-植物水分吸收和运输优化算法water uptake and transport-附Matlab免费代码
  • 数字地和模拟地
  • 使用 C++/OpenCV 和 MFCC 构建双重认证智能门禁系统
  • 白皮解读——173页数据安全治理白皮书5.0【附全文阅读】
  • 灵活应对市场波动的智能运营中枢​
  • leetcode918.环形子数组的最大和
  • Spark SQL架构及高级用法
  • Java Go SDK 管理工具与最佳实践
  • 【汇编逆向系列】九、函数传参之结构体 - SHL、SHR指令,小型结构体参数和返回值
  • 《深度剖析:5G网络切片如何精准保障不同业务QoS需求》
  • PHP语法基础篇(九):正则表达式
  • 本机上搭一个HTTPS网站用什么工具?.NET self host支持吗?
  • Redis--黑马点评--达人探店功能实现详解
  • C++ 11中lock_guard和unique_lock的区别
  • 初识Linux:Linux开发工具gcc/g++和gdb以及Makefile的使用
  • Python小工具之PDF合并