- 1. Projektstruktur
- 2. main.cpp
- 3. Util.qml
- 4. main.qml
- 5. Insgesamt
Neben C++-Klassen in QML können auch QML-Typen, die separate QML-Dateien sind, als Singleton verwendet werden.
qmlRegisterSingletonType wird dafür ebenfalls verwendet, aber damit dieser Typ als Singleton-Objekt funktioniert, müssen Sie pragma Singleton. in die QML-Datei selbst schreiben.
Lassen Sie uns eine kleine Anwendung erstellen, die auch mehrere Nachrichten anzeigt, während die Nachrichten durch die Methode Singleton QML Type abgeholt werden.
Projektstruktur
- SingletonQML.pro - Projektprofil
- main.cpp - Datei mit Hauptfunktion
- main.qml - Haupt-QML-Datei
- Util.qml - Singleton-QML
Das Projektprofil wird standardmäßig erstellt und nicht geändert.
main.cpp
Als Singleton-Objekt verwenden wir die Datei Util.qml . Damit es zu einem Singleton wird, muss es mit qmlRegisterSingletonType registriert und darin die Pragma-Singleton-Direktive angegeben werden. Zuerst registrieren wir es.
#include <QGuiApplication> #include <QQmlApplicationEngine> #include <QtQml> // Подключаем для использования функции qmlRegisterSingletonType int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); // Регистрируем qml файл через указание его пути. qmlRegisterSingletonType(QUrl("qrc:/Util.qml"), "Util", 1, 0, "Util"); QQmlApplicationEngine engine; engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); if (engine.rootObjects().isEmpty()) return -1; return app.exec(); }
Util.qml
Achten Sie darauf, die Direktive pragma Singleton. in diese Datei aufzunehmen.
pragma Singleton // Указываем, что этот QML Тип является синглетоном import QtQuick 2.0 Item { function getMessage(messageNumber) { switch(messageNumber) { case 1: return "First Message" case 2: return "Second Message" case 3: return "Third Message" default: return "Nothing found" } } }
main.qml
Und jetzt verwenden wir ein Singleton-Objekt, um Text mit dieser Funktion anzuzeigen.
import QtQuick 2.5 import QtQuick.Window 2.2 import QtQuick.Controls 1.4 import Util 1.0 // Таким образом производится импорт QML синглетона Window { visible: true width: 640 height: 480 title: qsTr("Singleton Class") ListView { anchors.fill: parent delegate: Item { height: 48 width: parent.width Text { anchors.fill: parent text: model.text verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignHCenter } } model: listModel } ListModel { id: listModel Component.onCompleted: { // Обращение к методу синглетона выглядит, как обращение к статическому методу listModel.append({'text': Util.getMessage(1)}) listModel.append({'text': Util.getMessage(2)}) listModel.append({'text': Util.getMessage(3)}) listModel.append({'text': Util.getMessage(4)}) } } }
Insgesamt
Auf diese Weise können Sie QML-Singleton-Objekte verwenden, um die Verwendung statischer Methoden zu emulieren, und dies ist der richtige Ansatz für die Arbeit mit solchen Funktionen.