首页 文章

不能在QML中直接使用枚举项,需要使用属性

提问于
浏览
2

使用Qt Quick 2.0,QT 5,一个(生成的)充满枚举的类将在GUI中使用 . class 已正确注册 . 不能直接在QML代码中使用枚举项,例如在 console.logswitch ... 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

1 回答

  • -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 侧使用它 .

相关问题