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

信号与槽断开连接

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

示例:

按过按钮二后:

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

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

lambda表达式定义槽函数

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

示例:

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

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

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

相关推荐
fpcc2 小时前
C++编程实践—C++实现类似Qt的信号槽机制
c++·qt
郝学胜_神的一滴2 小时前
Qt 高级开发 030:QListWidget 右键菜单全解,从策略配置到精准删除的优雅实现
c++·qt
海天鹰2 小时前
图片去黑边算法
qt·算法
走好每一步5 小时前
5、VTK刚体变换
qt·vtk·三维图像
宏笋5 小时前
QT 隐式共享/写时复制详解
qt
San813_LDD6 小时前
[QT]Qt对象树笔记:父子关系与内存管理
开发语言·qt
luoyayun3616 小时前
Qt/QML 音频波形图模块实现:从 PCM 数据到可缩放波形
qt·音视频·波形图绘制
旖-旎7 小时前
QT初始(1)
开发语言·c++·qt
资深流水灯工程师7 小时前
PySide6 + Qt Designer + PyCharm 完整开发流程
开发语言·qt·pycharm