我有一个这样定义的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 Creator中的“设计”选项卡)上打开该QML文件时,由于设计器未运行任何C ++代码,它拒绝加载该文件并显示QML module not found (SectionIdImportName)
。 / p>
如何使Designer与使用C ++枚举的QML文件一起使用?
我知道QML_DESIGNER_IMPORT_PATH
和QML enumeration attributes。我试图通过QML枚举来“模拟” C ++枚举,仅用于设计器,但是,这些枚举的值的使用像这样QMLType.EnumType.EnumValue
,而C ++枚举值必须仅用EnumType.EnumValue
来处理。该代码似乎可以与C ++枚举或QML枚举兼容,但不能同时兼容。
我正在使用Qt 5.11,很快将升级到5.12。
答案 0 :(得分:1)
我将其枚举封装在类中,从而在运行时和设计器中都可以使用:
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
}
请注意,未使用枚举的名称。
您可以在同一类中添加更多枚举,但是名称可能会冲突(无论是按域还是按文本)