Ich treffe ein Qt Metatype Problem.Qt C++ Metatyp Typflag stimmen nicht überein Problem
Ich habe eine const pointer
zu einer Klasse von qobject
abgeleitet und unten in QVariant
wie setzen will:
QVariant::fromValue(objectPointer)
ich erklärt haben, den Meta-Typen der abgeleiteten Klasse mit: Q_DECLARE_METATYPE(const QDrivedClass *)
in der Header-Datei (.h) der abgeleiteten Klasse.
Aber während der Laufzeit, ich unten eine Fehlermeldung anzeigt:
QMetaType::registerType: Binary compatibility break. Type flags for type 'const QDrivedClass *' [1093] don't match. Previously registered TypeFlags(0x10c), now registering TypeFlags(0x104).
ich das ganze Projekt überprüft und dort eine Zeile Code sind zu finden unter Fall kann dieses Problem:
qRegisterMetaType<T *>(QByteArray("const ") + QByteArray(T::staticMetaObject.className()) +
QByteArray("*"));
Wenn ich Kommentar oben Code, das Typeflag
Mismatch-Problem wird behoben. Aber es wird ein anderes Problem verursachen, da wir Signal/Slot der abgeleiteten Klasse verwenden müssen.
Kann mir jemand einen Rat geben, warum die qRegisterMetaType
und Q_DECLARE_METATYPE
verschiedene Typen Flags für den const Zeiger auf eine Klasse haben, die von QObject
abgeleitet ist und wie man es repariert?
Sie mischen const und nicht-const Typen in Ihrem qRegisterMetaType-Aufruf, der, denke ich, keine gute Idee ist. – E4z9
Wie dem auch sei, die Typ-Flags scheinen "beweglich + Zeiger auf QObject" zu sein, und die anderen nur "beweglich". Hat Ihre abgeleitete Klasse in ihrer Deklaration ein Makro 'Q_OBJECT'? – E4z9
Ja, die Klasse drived hat in ihrer Deklaration ein Makro Q_OBJECT. Und das Laufwerkobjekt wird in eine DLL exportiert. –