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 ..

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top