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を使用する必要があるため、別の問題が発生します。
qRegisterMetaType
とQ_DECLARE_METATYPE
には、QObject
から派生したクラスへのconstポインタの型フラグが異なっていて、それを修正する理由がありますか?
qRegisterMetaType呼び出しでconst型と非const型を混在させていますが、これは良い考えではありません。 – E4z9
とにかく、型フラグは "move + QObjectへのポインタ"であり、もう一方は "可動"です。派生クラスの宣言に 'Q_OBJECT'マクロがありますか? – E4z9
はい、ドライバクラスには宣言にQ_OBJECTマクロがあります。駆除されたオブジェクトはdllでエクスポートされます。 –