我正在尝试发送使用uint8_t
作为参数的排队信号。
我收到此错误:
QObject::connect: Cannot queue arguments of type 'uint8_t'
(Make sure 'uint8_t' is registered using qRegisterMetaType().)
我已添加qRegisterMetaType<uint8_t>();
作为main()
的第一行,我还在每个文件包含的标题中添加了Q_DECLARE_METATYPE(uint8_t)
。
我仍然得到同样的错误。那是怎么回事?对于基本类型来说,这是一些奇怪的事情,因为它适用于我的自定义类。
答案 0 :(得分:7)
uint8_t
是typedef
的{{1}}。
您可以将Qt的unsigned char
用于未签名的字符:typedef
,并且您不需要注册它。任何具有公共默认构造函数,公共复制构造函数和公共析构函数的类或结构都可以在quint8
中注册。您的QMetaType
是原子的,您不需要注册它,只需在Qt中使用正确的uint8_t
即可。
无论如何,如果您想要注册该类型以便typedef
可以使用它,或者QMetaProperty
只能使用它:
QueuedConnections
有关qRegisterMetaType<uint8_t>("uint8_t");
系统如何运作的详情,请阅读Qt的文档:doc.qt.io/qt-5/qmetatype.html