我有这样定义的C 枚举:
namespace SectionIdNamespace
{
Q_NAMESPACE
enum SectionId {
SomeValue
};
Q_ENUM_NS(SectionId)
};
我注册该枚举如下:
qmlRegisterUncreatableMetaObject(
SectionIdNamespace::staticMetaObject,
"SectionIdImportName",
1, 0,
"SectionId",
"Error: only enums"
);
并在QML中使用它:
import SectionIdImportName 1.0
....
SectionId.SomeValue
在QT快速设计器(QT创建者中的"设计"选项卡)中打开该QML文件时,它拒绝加载文件并说QML module not found (SectionIdImportName)
,因为设计师不运行任何C 代码。
如何使设计人员使用使用C 枚举的QML文件?
我知道QML_DESIGNER_IMPORT_PATH
和QML枚举属性。我试图通过为设计师枚举这样的QML枚举"模拟" C 枚举,但是,这些枚举的值与此QMLType.EnumType.EnumValue
一样使用,而C 枚举值只需用EnumType.EnumValue
就可以使人闻名。似乎代码可以与C 枚举或QML枚举兼容,但并非同时兼容。
我正在使用QT 5.11,很快升级到5.12。
我在运行时和设计师都可以使用它的枚举:
:class SectionIdWrapper : public QObject
{
Q_OBJECT
public:
enum class SectionIdEnum {
SomeValue
};
Q_ENUM(SectionIdEnum);
};
和注册如下:
qmlRegisterUncreatableType<SectionIdWrapper>("your.namespace", 1, 0, "SectionId", "Error: only enum");
和QML中的使用情况,就像预期:
import your.namespace 1.0
Item {
property int test: SectionId.SomeValue
}
请注意,未使用枚举的名称。
您可以在同一类中添加更多的枚举,但是这些名称可能会碰撞(域名或文本方面)