C++의 열거형(enum)을 QML에서 사용하는 방법을 설명한다.
먼저 QObject를 상속받는 클래스와 enum을 정의한다.
class MyEnums : public QObject
{
    Q_OBJECT
public:
    explicit MyEnums(QObject *parent = nullptr);
    enum CallStatus{
        Dialed = 0,
        Cancelled,
        Received,
        Missed
    };
    Q_ENUMS (CallStatus)
};
main.cpp
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include "myenums.h"
int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);
    // 정의한 enum을 qml 타입으로 등록
    qmlRegisterType<MyEnums>("MyEnum", 1, 0, "MyEnum");
    QQmlApplicationEngine engine;
    const QUrl url(QStringLiteral("qrc:/main.qml"));
    QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
                     &app, [url](QObject *obj, const QUrl &objUrl) {
        if (!obj && url == objUrl)
            QCoreApplication::exit(-1);
    }, Qt::QueuedConnection);
    engine.load(url);
    return app.exec();
}
QML에서 사용
import QtQuick 2.13
import MyEnum 1.0 // 등록한 타입을 import 한다.
Item {
    visible: true
    width: 640
    height: 480
    function getStatus(status){
        switch(status){
        case MyEnum.Cancelled:
            return "Cancelled"
        case MyEnum.Dialed:
            return "Dialed"
        case MyEnum.Received:
            return "Received"
        default:
            return ""
        }
    }
    Text {
        id: myType
        text: getStatus(MyEnum.Dialed)
        anchors.centerIn: parent
    }
}
QMetaEnum 클래스는 열거형에 대한 meta-data를 제공한다.
#include <QObject>
#include <QMetaEnum>
class MyEnums : public QObject
{
    Q_OBJECT
public:
    explicit MyEnums(QObject *parent = nullptr);
    enum CallStatus{
        Dialed = 0,
        Cancelled,
        Received,
        Missed
    };
    Q_ENUMS (CallStatus)
    static QString callStatusString(CallStatus type){
        const QMetaObject &mo = MyEnums::staticMetaObject;
        return QString(mo.enumerator(mo.indexOfEnumerator("CallStatus")).valueToKey(type));
    }
};
다음 처럼 QString문자열로 얻을 수 있다.
QString status = MyEnums::callStatusString(MyEnums::CallStatus::Received);









