在 QML 中使用 c++ 枚举作为字符串
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
。我现在的解决方案如下,尽管不优雅:
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
转换为 int。我仍然对更优雅的解决方案持开放态度。
编辑:
正如预期的那样,这打破了QML/Javascript端的switch
和===
。 与Q_ENUM()
导出的枚举整数进行比较时,必须使用switch(enumValue.valueOf())
和==
,例如MyClass.MyEnumElement
:
switch(myClass.enumValue.valueOf()){
case MyClass.MyEnumElement:
...
break;
}
和
if(myClass.enumValue == MyClass.MyEnumElement)
...
相关文章:
- 重载 std::字符串运算符+ 用于打印枚举名称
- 给枚举一个整数,并在 C++ 中将其相关值作为字符串获取
- 重载输入 (>>) 运算符以获取枚举字符串
- C++如何将字符串数组中的一个点设置为枚举变量
- 将整数值转换为以枚举为基础的字符串
- 将 Qt 属性枚举值打印为键字符串
- 如何在没有映射的情况下在枚举和字符串之间进行转换?
- 是否有任何操纵器将枚举值打印为字符串?
- C 中的枚举类型字符串类别
- 一种创建将字符串常量返回给枚举的类的廉价方法,反之亦然
- 失败的证明转换字符串到枚举类
- 使用 C++11 可变参数模板初始化枚举到字符串映射
- C++将多个字符串更改为枚举
- 从字符串转换时,如何组合多个枚举
- 翻译枚举值qt的字符串表示
- 如何重载<<以输出枚举的字符串值
- 在 QML 中使用 c++ 枚举作为字符串
- 使用地图将字符串与枚举连接
- 具有字符串的类中的枚举
- 将枚举字符串(不是值)传递给宏