Qt即使使用qRegisterMetaType

时间:2017-08-14 08:36:20

标签: c++ qt

我正在尝试发送使用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)

我仍然得到同样的错误。那是怎么回事?对于基本类型来说,这是一些奇怪的事情,因为它适用于我的自定义类。

1 个答案:

答案 0 :(得分:7)

uint8_ttypedef的{​​{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