Использование перечисления С++ в QML в виде строкиC++

Программы на C++. Форум разработчиков
Anonymous
Использование перечисления С++ в QML в виде строки

Сообщение Anonymous »

Я хотел бы использовать приведенное ниже перечисление в C++:

Код: Выделить всё

class MyClass : public QQuickItem {
Q_OBJECT
Q_PROPERTY(MyEnum enumValue READ getEnumValue)

public:
enum MyEnum{
MyEnumElement = 0
};
Q_ENUM(MyEnum)

slots:
MyEnum getEnumValue(){
return enumValue;
}

private:
MyEnum enumValue = MyEnumElement;
};
Так в QML:

Код: Выделить всё

MyClass {
id: myClass
}

Text {
text: "enumValue is: " + myClass.enumValue
}
Это приведет к тому, что enumValue будет MyEnumElement вместо enumValue, равным 0, как сейчас. Решение, которое у меня есть сейчас, является следующим, хотя и неэлегантным:

Код: Выделить всё

class MyClass : public QQuickItem {
Q_OBJECT
Q_PROPERTY(MyEnum enumValue READ getEnumValue)

public:
enum MyEnum{
MyEnumElement = 0
};
Q_ENUM(MyEnum)
QMetaEnum MyEnum_MetaEnum = QMetaEnum::fromType();
Q_INVOKABLE QString getEnumString(MyEnum enumVal){
return MyEnum_MetaEnum.valueToKey(enumVal);
}

slots:
MyEnum getEnumValue(){
return enumValue;
}

private:
MyEnum enumValue = MyEnumElement;
};
И:

Код: Выделить всё

MyClass {
id: myClass
}

Text {
text: "enumValue is: " + myClass.getEnumString(myClass.enumValue)
}
Есть ли лучший способ сделать это?

Подробнее здесь: https://stackoverflow.com/questions/376 ... -as-string

Вернуться в «C++»