Qt信号槽的坑

1、重载的信号(以QSpinBox为例)

像是点击按钮之类的信号槽很好连接,这是因为它的信号没有重载,如果像SpinBox那样有重载信号的话(Qt5.12的见下图,不过Qt5.15LTS开始就不再重载而是换信号名了),程序就不知道槽函数连接到哪个信号上去。

要解决这个问题,就需要将连接到的信号重载方式完全指明,就像上图Note中说的。

**方法一:**使用QOverload指定:

cpp 复制代码
connect(this->ui.spinBoxPD, QOverload<int>::of(&QSpinBox::valueChanged), this, QOverload<int>::of(&ImageShowWidget::on_test3));

**方法二:**根据函数形参指定:

cpp 复制代码
connect(this->ui.spinBoxS, SIGNAL(valueChanged(double)), this, SLOT(on_test1(double)));

2、信号对象必须不变

使用过程中曾经尝试过一种情况,类似:

cpp 复制代码
A a = nullptr;
connect(a, a.信号, b, b.槽);
a = new A();

这样连接后,信号槽完全无效,但编译又不报错。不过当时这三行代码离得非常远,排查了很久才想起来有可能是信号对象还没实例化就连接了信号,后面一测试果然是。

所以,切记要实例化信号对象才连接信号。同时,可以推断到,信号对象的内存指向应该是不能变的,否则信号连接要不就会乱掉,要不就会失效。

相关推荐
雨田嘟嘟10 小时前
QML ChartView 崩溃
qt
Aevget11 小时前
从复杂到高效:QtitanNavigation助力金融系统界面优化升级
c++·qt·金融·界面控件·ui开发
Jay Chou why did12 小时前
0. Qt 安装及源码及报错
qt
nianniannnn19 小时前
Qt布局管理停靠窗口QDockWidget类
开发语言·数据库·c++·qt·qt5·qt6.3
牵牛老人1 天前
Qt 中如何操作 Excel 表格:主流开源库说明介绍与 QXlsx 库应用全解析
qt·开源·excel
牵牛老人1 天前
QXlsx操作Excel深度解析:核心类接口与 Qt C++ 功能解析
qt
长沙红胖子Qt1 天前
关于 Qt5.x版本离线安装可以跳过登录但是实际离线仍需要登录 的解决方法
qt·离线安装·离线无法skip
友友马1 天前
『 QT 』QT控件属性全解析 (二)
开发语言·数据库·qt
大米粥哥哥1 天前
Qt QProcess基于Linux的命令管道符号无效问题【已解决】
linux·qt·shell·qprocess·1024程序员节·管道符号
mengzhi啊2 天前
QT实现消息未读提示
qt