【Qt】信号和槽(三) (断开连接和lambda函数)

信号与槽断开连接

使用disconnect函数,与connect的用法类似。

示例:

按过按钮二后:

实际开发中disconnect的使用较少,大部分情况是把信号和槽连接好后就不再关心。这里用disconnect的场景是主动断开当前信号所连接的槽函数,然后信号再重新连接绑定到另一个槽函数上。

若不断开,则会有两个日志的打印。

lambda表达式定义槽函数

lambda表达式本质是一个匿名函数,主要在回调函数中进行使用。通常是一次性的,也可以用auto识别函数类型,延长生命周期进行调用。

示例:

ambda除了可以按照传值捕获button,=的方式捕获变量,还能按照传引用捕获\&的方式捕获变量,但Qt中很少用传引用的方式=,因为在Qt中捕获的变量一般是各种控件的指针,指针变量传值或传引用都可以。按引用捕获有致命 问题。

按引用捕获的变量,需要关注其生命周期。例如,局部指针变量 button 在构造函数结束时就被销毁,可能被置为 nullptr。若 lambda 按引用捕获了 button,构造函数结束后 button 已为空。此时用户点击按钮触发 lambda,访问空指针会导致程序崩溃。

因此,按引用捕获风险大。按值捕获会拷贝指针指向的堆地址,即使外部指针被置空,lambda 内部的拷贝仍然有效。实际开发中,建议尽量使用值捕获。

相关推荐
宏笋44 分钟前
一款集结古今中外文学查阅与编辑的软件
qt
机器视觉知识推荐、就业指导11 小时前
为什么老说“纯 Qt 没啥就业市场”?
开发语言·qt
telepan11 小时前
Qt 开发避坑与性能指南:如何优雅、安全地定义全局常量字符串?
开发语言·qt
小灰灰搞电子12 小时前
完全驾驭 Qt 与数据库:C++ ORM 框架 QxOrm 原理与实践指南
数据库·c++·qt
QT界面美化性能优化12 小时前
QT+AI:使用AI技术为QT应用程序赋能
c++·人工智能·qt·opencv·qt教程·qt6.3
m0_6952514912 小时前
Qt MaintenanceTool 使用国内镜像加速下载(超详细教程)
开发语言·qt
小小龙学IT19 小时前
Qt 元对象系统(Meta-Object System)深度解析:从 MOC 到反射式编程
数据库·qt
小王C语言20 小时前
QT 基础:QT SDK 下载、配置、新建项目、项目代码解释
开发语言·qt
张人玉1 天前
基于 Python + PyQt5 的水果目标检测与分割可视化系统——水果深度学习识别可视化大屏
python·深度学习·qt·目标检测·sqlite·echarts
程与留2 天前
12_常用控件速查(下):QSpinBox、QSlider、QProgressBar、QCheckBox
c++·qt