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

信号与槽断开连接

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

示例:

按过按钮二后:

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

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

lambda表达式定义槽函数

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

示例:

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

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

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

相关推荐
丰锋ff18 小时前
1.2 Qt常用基础类型
开发语言·qt
nianniannnn20 小时前
Qt QMessageBox知识点
开发语言·数据库·qt
J_yyy20 小时前
【Qt核心组件类框架】
开发语言·qt
Quz1 天前
QML 网格与流式布局:Grid/GridLayout 与 Flow
qt
qq_401700411 天前
Qt容器性能优化:QVector、QHash、QMap到底应该怎么选?
开发语言·qt·性能优化
Quz1 天前
QML 线性布局:Row/RowLayout 与 Column/ColumnLayout
前端·qt
imatt2 天前
Qt Creator 在Windows下编译信息乱码
windows·qt
赤水无泪2 天前
qt中图标、名称的设置方式
开发语言·qt
房开民2 天前
Qt TCP 服务器开发实战:与 VisionMaster OCR 通信
服务器·qt·tcp/ip
熬夜苦读学习2 天前
QT_信号和槽
开发语言·qt