Что я хотел бы сделать, это использовать ниже перечисления в C++:Использование C++ перечисления в QML как строка
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 is MyEnumElement
вместо enumValue is 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<MyEnum>();
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)
}
Есть ли лучший способ сделать это?