2010-12-16 8 views
6

Ich könnte etwas offensichtlich hier fehlt, aber wenn eine Q_ENUM auf QML, auch im einfachsten Fall zu entlarven versucht, scheint nicht, wie in den QT-docs (http://doc.qt.nokia.com/4.7-snapshot/qtbinding.html#using-enumerations-of-a-custom-type)Q_ENUMS auf QML Qt Machen

gezeigt zu arbeiten

ich einen einfachen Testfall erstellt haben, sieht meine C++ Klasse 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 & eine Instanz dieser Klasse in die QDeclartiveContext registrieren injizieren.

Wenn ich versuche, auf die testVal -Eigenschaft zuzugreifen, wird anstelle einer Zeichenfolgendarstellung die Ganzzahl (in diesem Fall 1) zurückgegeben. Darüber hinaus mit der Instanz als ‚aVar‘ injiziert, wenn ich versuche, und den Zugang ‚aVar.FirstValue‘ wird das Ergebnis ‚undefined‘

dies bedeutet, dass ich tun kann, Tests Also nicht wie: 'if aVar.testVal == FirstValue' (Reference für die unqualifizierte Firstvalue)

Oder wie folgt aus: 'if aVar.testVal == aVar.FirstValue' (aVar.FirstValue ist nicht definiert)

Wer einmal durchgemacht? Es scheint zu Konflikt mit Beispiel in den QT-Dokumenten, obwohl das Objekt von QML in diesem Beispiel instanziiert wird, so könnte dies die Ursache sein ..

Antwort

16

Auf Enum-Werte kann nur zugegriffen werden als "ElementName.EnumValue", nicht "object.EnumValue". Also wird aVar.FirstValue nicht funktionieren; Sie müssen stattdessen MyClass.FirstValue verwenden (und dazu müssen Sie MyClass mit qmlRegisterType() registrieren und dann das registrierte Modul importieren).

Enumerationswerte werden auch nicht als Zeichenfolgen zurückgegeben, da sie als Ganzzahlwerte definiert sind.

+0

ah, gotcha, danke. – aidanok

Verwandte Themen