[英]Using c++ enum in QML as string
我想要做的是在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 is MyEnumElement
而不是enumValue is 0
現在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)
}
有一個更好的方法嗎?
我找到了以下工作:
class MyClass : public QQuickItem {
Q_OBJECT
Q_PROPERTY(QVariant enumValue READ getEnumValue)
public:
enum MyEnum{
MyEnumElement = 0
};
Q_ENUM(MyEnum)
slots:
QVariant getEnumValue(){
return QVariant::fromValue(enumValue);
}
private:
MyEnum enumValue = MyEnumElement;
};
QML方面:
MyClass {
id: myClass
}
Text {
text: "enumValue is: " + myClass.enumValue.toString()
}
在沒有.toString()
情況下使用仍會導致QVariant
被QVariant
轉換為int。 我仍然願意接受更優雅的解決方案。
編輯:
正如預期的那樣,這會打破QML / Javascript端的switch
和===
。 switch(enumValue.valueOf())
和==
必須比較枚舉通過出口整數時,可以使用Q_ENUM()
如MyClass.MyEnumElement
:
switch(myClass.enumValue.valueOf()){
case MyClass.MyEnumElement:
...
break;
}
和
if(myClass.enumValue == MyClass.MyEnumElement)
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.