class StyleClass : public QObject {
public:
typedef enum
{
STYLE_RADIAL,
STYLE_ENVELOPE,
STYLE_FILLED
} Style;
Style m_style;
//...
};
.h文件包含上面的代码 . How to access the above enum through QML?
6 回答
您可以将枚举包装在一个派生自QObject的类中(并且您公开给QML):
style.hpp:
main.cpp中:
QML代码:
其他信息(未在Qt 5.5之前记录):
您的枚举值名称 must 以大写字母开头 .
这将有效:
这不是:
你不会在编译时遇到任何错误,它们会被QML引擎忽略 .
使用
Q_ENUMS
宏使moc
知道您的枚举,如docs中所述 . 如docs中所述,您必须在使用之前注册'owns'枚举的类 .只有当枚举是全局的或由非
QObject
派生类拥有时,Ashif的引用块才有效 .所有这些解决方案都无法使用此枚举类作为信号/插槽的参数 . 这段代码编译,但在QML中不起作用:
QML部分:
此代码生成运行时错误,如下所示:
要使此代码正常工作,您必须使用其他注册表Qt元对象类型:
更多细节写在这里:https://webhamster.ru/mytetrashare/index/mtb0/1535044840rbtgvfmjys(rus)
自Qt版本5.10起,Qt还支持QML定义的枚举类型 . 作为air-dex基于C语言的答案的替代方法,您现在还可以使用QML创建枚举类型:
Style.qml:
如果您只打算在QML代码中使用枚举,则此解决方案要简单得多 . 您可以使用qml中的Style类型访问上面的枚举,例如:
有关基于QML的枚举类型的另一个用法示例,请参阅here .
As of Qt 5.8 您可以从
namespace
公开枚举:定义命名空间和枚举:
在创建Qml视图/上下文之前注册命名空间(例如,在main()中):
在QML文件中使用它:
参考文献:
https://www.kdab.com/new-qt-5-8-meta-object-support-namespaces/
http://doc.qt.io/qt-5/qqmlengine.html#qmlRegisterUncreatableMetaObject
http://doc.qt.io/qt-5/qobject.html#Q_ENUM_NS