- 1. MeinText.qml
- 2. main.qml
Nun, es ist endlich da!!! Jetzt ist es möglich, Aufzählungen (enum) sofort in QML zu deklarieren, ohne mit C++ zu tanzen. In diesem Artikel habe ich beschrieben, wie ich meine Enumerationen über C++ zu QML hinzufüge . Tatsächlich gibt es hier von der C++-Seite nichts Kompliziertes, Sie müssen nur eine von QObject geerbte Klasse schreiben und Ihre Aufzählung in dieser Klasse über Q_ENUM oder Q_ENUMS registrieren und die Klasse über qmlRegisterType. registrieren.
Q_ENUM
wurde in Qt 5.5 hinzugefügt, um
Q_ENUMS
zu ersetzen, und ermöglicht es Ihnen,
QMetaEnum
zur Kompilierzeit mit
QMetaEnum::fromType zu erhalten
Allerdings funktioniert nach meinen Beobachtungen bei der Registrierung von Aufzählungen über Q_ENUM in QML-Dateien in Qt Creator die Codevervollständigung für diese Aufzählungen nicht, während bei der Registrierung über Q_ENUMS alles funktioniert.
Aber jetzt ist es möglich, die Aufzählung direkt in Ihren benutzerdefinierten QML-Typ zu schreiben.
Lassen Sie uns beispielsweise diesen Objekttyp in QML erstellen.
MeinText.qml
import QtQuick 2.10 Text { enum MyEnum { First = 10, Second } anchors.centerIn: parent }
Dann kann es in main.qml wie folgt verwendet werden
main.qml
import QtQuick 2.10 import QtQuick.Window 2.10 Window { visible: true width: 640 height: 480 title: qsTr("Hello World") MyText { text: MyText.MyEnum.Second } }
Die Nummer 11 wird auf dem Bildschirm angezeigt
Wie Sie sehen können, sieht die Syntax für den Zugriff auf eine Aufzählung wie folgt aus.
<Name des QML-Objekttyps> * . <Enum-Name> . <Enum-Mitgliedsname>**
Und es spielt keine Rolle, ob Sie diese Aufzählung innerhalb oder außerhalb des Typs verwenden. Das heißt, die Verwendung innerhalb des Typs dieser Aufzählung sieht folgendermaßen aus.
import QtQuick 2.10 Text { enum MyEnum { First = 10, Second } anchors.centerIn: parent text: MyText.MyEnum.Second }
AUFMERKSAMKEIT!!! - Die folgende Option funktioniert nicht
import QtQuick 2.10 Text { enum MyEnum { First = 10, Second } anchors.centerIn: parent text: MyEnum.Second }
Das heißt, selbst innerhalb eines benutzerdefinierten Typs müssen Sie auf die Aufzählung dieses Typs über seinen Namen zugreifen, d. h. den Namen der QML-Datei.
Ich mache Sie darauf aufmerksam, dass aus Sicht der Organisation von Programmen in QML jede QML-Datei ein QML-Typ ist, d. h. ein eigenständiges Objekt, das von der QObject-Klasse auf C++-Ebene in der geerbt wird Vererbungshierarchie.
Außerdem werden die folgenden Optionen zum Deklarieren von Enums leider noch nicht unterstützt.
enum MyEnum { First = -1, Second } enum MySecondEnum { First, Second = First }
Unter anderem unterstützt Qt Creator 4.5.0, das zum Zeitpunkt des Schreibens aktuell ist, noch kein Enum-Syntax-Highlighting in QML. Die Aufzählungen selbst funktionieren jedoch.
А как правильно зарегистрировать C++ enum, допустим
чтобы использовать его в QML как
У меня никак не получается тип проперти сделать enum из C++, только как int
QML - Урок 028. Регистрация пользовательских enum в QML