2016-12-25 64 views
0

我遇到了qt metatype問題。qt C++ metatype typeflag不匹配問題

我有一個const pointerqobject派生和一類要投入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不匹配問題將被修復。但是它會引起另一個問題,因爲我們需要使用派生類的信號/插槽。

任何人都可以給我一些建議,爲什麼qRegisterMetaTypeQ_DECLARE_METATYPE將有不同的類型標誌的常量指針從一個類派生從QObject以及如何解決它?

+1

您在qRegisterMetaType調用中混合了const和非const類型,我認爲這不是一個好主意。 – E4z9

+0

無論如何,類型標誌似乎是「可移動的+指向QObject的指針」,而另一個只是「可移動的」。你的派生類在它的聲明中有一個'Q_OBJECT'宏嗎? – E4z9

+0

是的,驅動類在聲明中有一個Q_OBJECT宏。並驅動對象導出在一個DLL。 –

回答

0

E4z9,感謝您指出混合const和非const類型。

這是類型不匹配問題的根本原因。

我爲如下代碼:

qRegisterMetaType <const T *> (QByteArray("const ") + QByteArray(T::staticMetaObject.className()) + QByteArray("*")); 

然後類型不匹配的問題得到解決。

+0

很棒,你發現這個問題 – E4z9