我遇到了qt metatype問題。qt C++ metatype typeflag不匹配問題
我有一個const pointer
從qobject
派生和一類要投入QVariant
象下面這樣:
QVariant::fromValue(objectPointer)
我宣佈使用派生類的元類型:Q_DECLARE_METATYPE(const QDrivedClass *)
在頭文件(.H)的派生類。
但在運行時,我得到了以下錯誤:
QMetaType::registerType: Binary compatibility break. Type flags for type 'const QDrivedClass *' [1093] don't match. Previously registered TypeFlags(0x10c), now registering TypeFlags(0x104).
我檢查了整個項目,並且在那裏是一個行代碼下面可能會導致此問題:
qRegisterMetaType<T *>(QByteArray("const ") + QByteArray(T::staticMetaObject.className()) +
QByteArray("*"));
如果我註釋以上代碼,Typeflag
不匹配問題將被修復。但是它會引起另一個問題,因爲我們需要使用派生類的信號/插槽。
任何人都可以給我一些建議,爲什麼qRegisterMetaType
和Q_DECLARE_METATYPE
將有不同的類型標誌的常量指針從一個類派生從QObject
以及如何解決它?
您在qRegisterMetaType調用中混合了const和非const類型,我認爲這不是一個好主意。 – E4z9
無論如何,類型標誌似乎是「可移動的+指向QObject的指針」,而另一個只是「可移動的」。你的派生類在它的聲明中有一個'Q_OBJECT'宏嗎? – E4z9
是的,驅動類在聲明中有一個Q_OBJECT宏。並驅動對象導出在一個DLL。 –