gpt4 book ai didi

qt - 将 Qt 的 Q_ENUMS 暴露给 QML

转载 作者:行者123 更新时间:2023-12-04 13:17:45 30 4
gpt4 key购买 nike

我可能在这里遗漏了一些明显的东西,但是当尝试将 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,然后导入注册的模块)。

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

关于qt - 将 Qt 的 Q_ENUMS 暴露给 QML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4461017/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com