2016-12-25 3 views
0

qtメタタイプ問題を満たしています。qt C++メタタイプの型フラグが一致しない問題

私はqobjectから派生クラスへconst pointerを持っており、以下のようにQVariantに入れたい:

QVariant::fromValue(objectPointer) 

私が使用して、派生クラスのメタタイプを宣言している:ヘッダファイル(.H)にQ_DECLARE_METATYPE(const QDrivedClass *)を派生クラスの

しかし、実行時に、私はエラーの下になった:

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ミスマッチの問題は修正されます。しかし、派生クラスのsignal/slotを使用する必要があるため、別の問題が発生します。

qRegisterMetaTypeQ_DECLARE_METATYPEには、QObjectから派生したクラスへのconstポインタの型フラグが異なっていて、それを修正する理由がありますか?

+1

qRegisterMetaType呼び出しでconst型と非const型を混在させていますが、これは良い考えではありません。 – E4z9

+0

とにかく、型フラグは "move + QObjectへのポインタ"であり、もう一方は "可動"です。派生クラスの宣言に 'Q_OBJECT'マクロがありますか? – E4z9

+0

はい、ドライバクラスには宣言にQ_OBJECTマクロがあります。駆除されたオブジェクトはdllでエクスポートされます。 –

答えて

0

E4z9、const型と非const型の混合を指摘してくれてありがとう。

これは型の不一致の問題の根本原因です。

私は以下のようにコードを変更:

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

はその後、型の不一致の問題は修正されます。

+0

問題が見つかりました – E4z9

関連する問題