Offenlegen von Qt Q_ENUMS auf QML
Frage
Ich könnte etwas offensichtlich hier fehlt, aber wenn eine Q_ENUM zu QML zu entlarven versucht, auch im einfachsten Fall scheint nicht zu arbeiten wie in den QT-docs ( http://doc.qt.nokia.com/4.7-snapshot/qtbinding .html # using-Aufzählungen-of-a-custom-Typ )
Ich habe einen einfachen Testfall erstellt, meine C ++ Klasse aussieht wie:
class MyClass : public QDeclarativeItem {
Q_OBJECT
Q_ENUMS(testType)
public:
MyClass() : t(FirstValue) { }
enum testType { InvalidValue, FirstValue, SecondValue } ;
testType testVal() const { return t; }
Q_PROPERTY(testType testVal READ testVal NOTIFY testValChanged)
private:
testType t;
signals:
void testValChanged();
};
ich dann registrieren & inject eine Instanz dieser Klasse in die QDeclartiveContext.
Wenn ich versuche, und den Zugang der testVal Eigenschaft, gibt es die ganze Zahl (in diesem Fall 1) eher als eine String-Darstellung. Darüber hinaus injiziert mit der Instanz als ‚aVar‘, wenn ich versuche, und den Zugang ‚aVar.FirstValue‘, ist das Ergebnis ‚nicht definiert‘
Dies bedeutet also, kann ich nicht tun Tests wie: 'if aVar.testVal == FirstValue'
(Reference für den uneingeschränkten Firstvalue)
Oder wie folgt aus: 'if aVar.testVal == aVar.FirstValue'
(aVar.FirstValue
ist nicht definiert)
Wer einmal durchgemacht? Es scheint Konflikt mit Beispiel in der QT-Dokumentation zur Verfügung gestellt, obwohl das Objekt von QML in diesem Beispiel instanziert wird, so könnte dies die Ursache sein ..
Lösung
Enum-Werte können nur als "ElementName.EnumValue", nicht "object.EnumValue" zugegriffen werden. Also, aVar.FirstValue wird nicht funktionieren; Sie benötigen MyClass.FirstValue zu verwenden, anstatt (und dies zu tun, müssen Sie MyClass mit qmlRegisterType () und importieren Sie dann die registrierte Modul registrieren).
Auch ENUM-Werte als nicht als Strings zurück, da sie als Integer-Werte definiert sind.