暴露Qt';s Q_枚举到QML

暴露Qt';s Q_枚举到QML,qt,enums,qml,Qt,Enums,Qml,这里我可能遗漏了一些明显的东西,但是当尝试向QML公开Q_ENUM时,即使是在最简单的情况下,似乎也无法像QT文档()中所示那样工作 我创建了一个简单的测试用例,我的C++类看起来像: class MyClass : public QDeclarativeItem { Q_OBJECT Q_ENUMS(testType) public: MyClass() : t(FirstValue) { } enum testType { InvalidValue, Fi

这里我可能遗漏了一些明显的东西,但是当尝试向QML公开Q_ENUM时,即使是在最简单的情况下,似乎也无法像QT文档()中所示那样工作

我创建了一个简单的测试用例,我的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”,结果是“未定义”

因此,这意味着我不能进行如下测试:
“if aVar.testVal==FirstValue”
(对于非限定的FirstValue,请参考error)

或者类似这样:
'if aVar.testVal==aVar.FirstValue'
aVar.FirstValue
未定义)


以前有人经历过吗?这似乎与QT文档中提供的示例相冲突,尽管在该示例中对象是从QML实例化的,所以这可能是原因

枚举值只能作为“ElementName.EnumValue”而不是“object.EnumValue”访问。所以,aVar.FirstValue不起作用;您需要改用MyClass.FirstValue(为此,需要使用qmlRegisterType()注册MyClass,然后导入注册的模块)

此外,枚举值不能作为字符串返回,因为它们被定义为整数值