Предоставление Qt Q_ENUMS для QML - PullRequest
6 голосов
/ 16 декабря 2010

Я мог бы упустить что-то очевидное здесь, но при попытке представить Q_ENUM для QML даже в самом простом случае, похоже, не работает, как показано в документах QT (http://doc.qt.nokia.com/4.7-snapshot/qtbinding.html#using-enumerations-of-a-custom-type)

IЯ создал простой тестовый пример, мой класс C ++ выглядит следующим образом:

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

Затем я регистрирую и внедряю экземпляр этого класса в QDeclartiveContext.

Когда я пытаюсь получить доступ к testValсвойство, оно возвращает целое число (в данном случае 1), а не строковое представление.Кроме того, с экземпляром, внедренным как 'aVar', если я пытаюсь получить доступ к 'aVar.FirstValue', результатом будет 'undefined'

Так что это означает, что я не могу выполнять тесты, такие как: 'if aVar.testVal == FirstValue' (ReferenceError для неквалифицированного FirstValue)

Или вот так: 'if aVar.testVal == aVar.FirstValue' (aVar.FirstValue не определено)

Кто-нибудь сталкивался с этим раньше? Кажется, он конфликтует с примером, представленным в документации по QT, хотя в данном примере объект создается из QML, так что это может быть причиной ..

1 Ответ

17 голосов
/ 17 декабря 2010

Доступ к значениям перечисления возможен только как «ElementName.EnumValue», а не «object.EnumValue». Таким образом, aVar.FirstValue не будет работать; вместо этого вам нужно использовать MyClass.FirstValue (и для этого вам нужно зарегистрировать MyClass с помощью qmlRegisterType () и затем импортировать зарегистрированный модуль).

Кроме того, перечисляемые значения не возвращаются как строки, поскольку они определены как целочисленные значения.

...