2010-12-16 14 views
6

için QT'ın Q_ENUMS Açığa ancak, QT docs (http://doc.qt.nokia.com/4.7-snapshot/qtbinding.html#using-enumerations-of-a-custom-type)ben bariz burada bir şey eksik olabilir QML

gösterildiği gibi çalışmaya görünmüyor sonra & QDeclartiveContext içine bu sınıfın bir örneğini enjekte kayıt

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(); 
}; 

: gibi

Ben basit bir test durumda oluşturduk, benim C++ sınıfı görünüyor.

Ben testVal özelliğine erişmeye çalıştığımda, bir dize gösterimi yerine tamsayı (bu durumda 1) döndürür. Ayrıca , ben denemek ve, sonuç

Yani bu ben gibi testler yapamaz demektir 'tanımsız' olan erişim 'aVar.FirstValue' eğer 'Avar' olarak enjekte örneğiyle: için 'if aVar.testVal == FirstValue' (ReferenceError niteliksiz FirstValue)

Ya da böyle

: 'if aVar.testVal == aVar.FirstValue' ( aVar.FirstValue tanımlanmamış)

herkes önce de? QT belgelerinde sağlanan örnekle çakışıyor gibi görünmektedir, ancak bu örnekte Nesne QML'den başlatılmıştır, bu nedenle bunun nedeni olabilir ..

cevap

16

Enum değerlerine yalnızca "ElementName.EnumValue" olarak erişilemez, değil "object.EnumValue". Yani, aVar.FirstValue işe yaramaz; bunun yerine MyClass.FirstValue kullanmanız gerekecek (ve bunu yapmak için MyClass'ı qmlRegisterType() ile kaydettirmeniz ve sonra da kayıtlı modülü almanız gerekir). Ayrıca, enum değerleri tamsayı değerleri olarak tanımlandığından, dizeler olarak döndürmedikleri de değerlerdir.

+0

ah, teşekkürler, teşekkürler. – aidanok