1、未使用Q_OBJECT宏;
2、信号与槽的参数不对应;
3、信号与槽发送的参数需要系统识别,如自定义的、组合的参数需要注册:
(1)、函数注册:qRegisterMetaType<QVector<int>>("QVector<int>");
- 作用于单个的文件;
- 用于多线程之间的信号与槽的通信
(2)、宏定义注册: Q_DECLARE_METATYPE(QVector<int>)
- 作用于整个工程;
- 主要用于QVariant;
- 声明的自定义类型需要具备公共的构造函数、复制函数和析构函数;
- 多线程中不能实现信息的传递需要qRegisterMetaType
4、信号与槽声明不正确:
槽函数没有正确地声明在类的public slots、protected slots或private slots部分,这将阻止它作为有效的槽函数
5、动态创建的对象生命周期问题:
如果对象是在堆上动态创建且未正确管理生命周期,可能在信号发射时对象已被销毁,从而槽函数无法执行。
6、连接时机问题:
如果在对象构造完成之前就尝试连接信号与槽,由于对象状态未初始化完毕,连接也可能失败。
模块加载顺序和初始化问题:
7、如果涉及到动态库加载或者跨模块的信号槽连接,有可能因模块加载顺序不正确导致连接失败。
8、智能指针与自动连接:
使用 QObject 派生类的智能指针时,如果不注意指针的生命周期管理,尤其是在使用隐式(自动)连接时,可能因指针释放而导致连接失效。