使用Qt Quick 2.0,QT 5,一个(生成的)充满枚举的类将在GUI中使用。
班级已正确注册。无法在QML代码中直接使用枚举项,例如
在console.log
或switch
... case
中,他们总是评估为undefined
。
将枚举分配给property int
DOES工作,并给出预期值。
为什么?如何直接使用枚举,而不复制所有枚举(数百)
属性?
guiids.h:
#include <QObject>
class GuiIDs : public QObject
{
Q_OBJECT
// ...
Q_ENUMS(Element_ALARMSTATUS_t)
// ...
public:
// ...
enum Element_ALARMSTATUS_t {
status_ALARMSTATUS_HIDDEN,
status_ALARMSTATUS_NOALARM,
status_ALARMSTATUS_INFO,
status_ALARMSTATUS_ALARM,
status_ALARMSTATUS_ACKNOWLEDGED,
status_ALARMSTATUS_PAUSED,
element_ALARMSTATUS_COUNT
};
// ...
};
test.qml:
import QtQuick 2.0
import bla.bla.bla.guiids 1.0
Rectangle {
// ...
Rectangle {
x: 0
y: 0
width: 100
height: 100
color: "red"
MouseArea {
anchors.fill: parent
property int foo: GuiIDs.element_ALARMSTATUS_COUNT
onClicked: {
// ...
console.log("foo=",foo);
console.log("GuiIDs.element_ALARMSTATUS_COUNT=",GuiIDs.element_ALARMSTATUS_COUNT)
}
}
}
}
单击红色矩形后记录输出:
qml: foo= 6
qml: GuiIDs.element_ALARMSTATUS_COUNT= undefined
答案 0 :(得分:-1)
将enum
封装到QObject
中,就像我一样 - 例如来自我的代码:
#ifndef UEMOBILEDATACONNECTION
#define UEMOBILEDATACONNECTION
#include <QObject>
class UeMobileDataConnection : public QObject
{
Q_OBJECT
public:
enum UeTypeMobileDataConnection
{
NOT_CONNECTED=false,
CONNECTED=true
};
Q_ENUM(UeTypeMobileDataConnection)
};
#endif // UEMOBILEDATACONNECTION
然后注册类型 - 我的代码示例:
qmlRegisterUncreatableType<UeMobileDataConnection>("si.testapp",
1,
0,
"UeTypeMobileDataConnection",
"Mobile Data Connection Status");
并在QML
方面使用它。