2017-08-14 72 views
0

我試圖發送一個使用uint8_t作爲參數的排隊信號。Qt無法爲'uint8_t'類型的參數排隊,即使使用qRegisterMetaType

我得到這個錯誤:

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

你是否用'uint16_t'等其他原始類型測試過它? – user0042

回答

4

uint8_ttypedef對於unsigned char。 你可以使用Qt的typedef作爲unsigned char:quint8,你不需要註冊它。任何具有公共默認構造函數,公共構造函數和公共構造函數的類或結構都可以在QMetaType中註冊。你的uint8_t是原子的,你不需要註冊它,只需在Qt中使用合適的typedef即可。 無論如何,如果你想註冊一個類型,以便它可以通過QMetaProperty使用,或在QueuedConnections只是做正確的事:

qRegisterMetaType<uint8_t>("uint8_t"); 

欲瞭解更多信息,QtMeta系統的工作,請如何閱讀Qt的文檔吧:doc.qt.io/qt-5/qmetatype.html

相關問題