我在这里可能会遗漏一些明显的东西,但是当尝试将Q_ENUM暴露给QML时,即使在最简单的情况下,也似乎不如QT文档(http://doc.qt.nokia.com/4.7-snapshot/qtbinding.html#using-enumerations-of-a-custom-type)中所示工作

我创建了一个简单的测试用例,我的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();
};

然后,我将此类的实例注册并注入(inject)QDeclartiveContext中。

当我尝试访问testVal属性时,它返回整数(在这种情况下为1)而不是字符串表示形式。
另外,将实例注入(inject)为“aVar”,如果我尝试访问“aVar.FirstValue”,结果为“未定义”

因此,这意味着我无法进行类似的测试:'if aVar.testVal == FirstValue'(不合格的FirstValue的ReferenceError)

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

有人通过过吗?尽管似乎是在QT文档中提供的示例,但是该对象是从该示例中的QML实例化的,因此这可能是原因。

最佳答案

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

同样,枚举值不作为字符串返回,因为它们被定义为整数值。

07-24 22:34