Для того, щоб використовувати в QML переліки enum, прописані в C++, необхідно створити клас, успадкований від QObject, і зареєструвати його як QML Type перед запуском движка QML в додатку.
Для вивчення створіть проект із використанням QtQuick.
Мінімальний варіант такого класу з перерахуванням буде таким:
#ifndef INFO_H #define INFO_H #include <QObject> class Info : public QObject { Q_OBJECT public: enum State { Information, Debug, Warning, Error }; Q_ENUM(State) }; #endif // INFO_H
Далі необхідно зареєструвати цей клас як QML Type у функції main. Для цього знадобиться заголовний файл QtQml та функція qmlRegisterType.
#include <QGuiApplication> #include <QQmlApplicationEngine> #include <QtQml> // Подключить QtQml для использования qmlRegisterType #include "info.h" // Подключить заголовочный файл класса Info int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); qmlRegisterType<Info>("info", 1, 0, "Info"); // Зарегистрировать данный класс в качестве модуля QQmlApplicationEngine engine; engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); if (engine.rootObjects().isEmpty()) return -1; return app.exec(); }
Після цього залишиться лише підключити новий QML модуль у файлі main.qml і користуватися переліками для відображення тексту. Виводитимемо повідомлення "Message 0", "Message 1" і т.д. Числа будуть взяті з перерахунків.
import QtQuick 2.5 import QtQuick.Window 2.2 import QtQuick.Controls 1.4 import info 1.0 // Подключить модуль Window { visible: true width: 360 height: 360 title: qsTr("Enumeration") ListView { anchors.fill: parent delegate: Item { height: 48 width: parent.width Text { anchors.fill: parent text: "Message " + model.text verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignHCenter } } model: ListModel { // Воспользоваться перечислениями из C++ ListElement {text: Info.Information} ListElement {text: Info.Debug} ListElement {text: Info.Warning} ListElement {text: Info.Error} } } }
Зовнішній вигляд програми буде наступним: