Um C++-Aufzählungen in QML zu verwenden, müssen Sie eine Klasse erstellen, die von QObject erbt, und sie als QML-Typ registrieren, bevor Sie die QML-Engine in der Anwendung ausführen.
Erstellen Sie zum Lernen ein Projekt mit QtQuick.
Die minimale Variante einer solchen Klasse mit Aufzählungen sieht wie folgt aus:
#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
Als Nächstes müssen Sie diese Klasse als QML-Typ in der Hauptfunktion registrieren. Dazu benötigen Sie die QtQml-Header-Datei und die Funktion 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(); }
Danach muss nur noch das neue QML-Modul in der Datei main.qml eingebunden und die Enums zur Anzeige des Textes verwendet werden. Wir werden die Nachricht "Nachricht 0", "Nachricht 1" usw. anzeigen. Zahlen werden aus Aufzählungen genommen.
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} } } }
Die App wird wie folgt aussehen: