QObject::connect: Cannot queue arguments of type ‘xxx‘
在 Qt5 的 C++ 开发中,出现QObject::connect: Cannot queue arguments of type 'SatelliteCalcResult'
错误,是因为当使用Qt::QueuedConnection
(或在不同线程间连接信号与槽)时,Qt 需要知道如何序列化自定义类型。
要解决这个问题,你需要:
- 确保
SatelliteCalcResult
是一个完整的类型(非前向声明) - 注册该类型到 Qt 的元对象系统中
以下是具体的解决步骤:
// 在SatelliteCalcResult类定义的头文件中
#include <QMetaType>class SatelliteCalcResult {// 类的定义...
};// 在类定义之后(不是在头文件中)或实现文件中
Q_DECLARE_METATYPE(SatelliteCalcResult)// 在使用该类型的连接之前(通常在main函数或初始化代码中)
qRegisterMetaType<SatelliteCalcResult>("SatelliteCalcResult");
详细说明:
- 包含 QMetaType 头文件:为了使用元类型系统相关功能
- Q_DECLARE_METATYPE:声明该类型可用于 Qt 的元对象系统
- qRegisterMetaType:在运行时注册该类型,参数中的字符串应与类型名称完全一致
如果你使用的是结构体而非类,同样适用上述方法。确保在建立连接前完成类型注册,通常在应用程序启动时执行一次即可。