한국어
Qt
 

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);
번호 제목 글쓴이 날짜 조회 수
공지 Qt프로그래밍(QtQuick) Beginner를 위한 글 읽는 순서 운영자 2019.01.05 117009
140 Qt Logging Rule, Qt 프레임워크 로그 출력 makersweb 2017.01.13 9118
139 Windows에서 라즈베리파이3 Qt 어플리케이션 개발 및 원격 실행 file makersweb 2018.02.23 9064
138 멀티 스레드환경, 스레드에 안전한 이벤트처리 makersweb 2016.10.27 8995
137 Qt기반의 오픈소스 프로젝트들 makersweb 2019.05.15 8991
136 Qt기반의 오픈소스 프로젝트들 - 2 운영자 2019.07.21 8917
135 UI 폼(Form)작성 시 탭 순서(Tab Order) 설정 file makersweb 2020.08.24 8828
134 C++로 구현된 모델을 QML의 ListView에서 참조 file makersweb 2019.09.07 8821
133 Qt 를 사용하거나 기반으로 하는 응용프로그램 file makersweb 2021.01.30 8670
132 QString 문자열에서 숫자만 추출해서 QString으로 반환 makersweb 2017.01.10 8430
131 Qt응용프로그램 실행 시 콘솔창(터미널)같이 띄우기 file makersweb 2019.01.16 8424
130 라즈베리파이4에 대한 Qt 5.14.1 크로스컴파일 [1] file makersweb 2020.02.12 8406
129 Qml에서 키보드 입력 이벤트 핸들링 file makersweb 2018.08.09 8330
128 QML에서 앵커(anchors)로 위치 지정 file makersweb 2021.10.05 8262
127 Qml 기본 컴포넌트 강좌 (4) - 모델 리스팅(Listing) file 운영자 2019.02.23 8221
126 Windows에서 Qt D-Bus를 사용하여 프로세스간 통신(IPC) file makersweb 2019.05.02 8092
125 QTextCodec클래스를 사용하여 유니코드와 EUC-KR 변환 makersweb 2019.03.25 7984
124 Widgets(C++) 기반의 기본 스타일을 Dark 테마 및 Material 디자인 스타일로 바꾸기 file makersweb 2023.01.28 7876
123 QML에서 동적으로 텍스트 다국어 처리 file makersweb 2018.11.04 7778
» 열거형(enum)을 QML에서 사용하는 방법과 문자열(QString)로 얻기 makersweb 2019.08.20 7737
121 QNetworkAccessManager를 통해 HTTP POST 하는 예제 makersweb 2019.01.17 7732