Moderne QML-Module
QML-Module sind in Qt 6 leistungsfähiger und einfacher zu verwenden geworden. Die folgenden Abschnitte beschreiben, wie man QML-Module modernisiert, die bereits qt_add_qml_module verwenden.
Siehe auch Portierung von QML-Modulen nach CMake, wie man ein QML-Modul auf die qt_add_qml_module CMake API portiert.
qt_standard_project_setup verwenden
qt_standard_project_setup richtet Qt CMake Richtlinien ein, die unter anderem für moderne QML Module benötigt werden. Um Ihr QML-Modul zu modernisieren und Best Practices zu befolgen, rufen Sie qt_standard_project_setup in der Top-Level CMakeLists.txt
Datei des Projekts vor jedem qt_add_qml_module Aufruf auf:
qt_standard_project_setup(REQUIRES 6.8)
Verwenden Sie den neuen Standard-Ressourcenpfad-Präfix
Der Standard-Ressourcenpfad für QML-Module wurde mit QTP0001 von :/
auf :/qt/qml
verschoben. Verwenden Sie keine benutzerdefinierten Ressourcenpräfixe und erweitern Sie keine Importpfade in der Engine. Entfernen Sie alle RESOURCE_PREFIX
Argumente aus allen qt_add_qml_module Aufrufen, sowie alle Aufrufe von QQmlEngine::addImportPath oder ähnlichem. Ändern Sie alle qrc-Pfade in Ihrem C++- und QML-Code, um den neuen Ressourcenpfad-Präfix zu verwenden:
// C++ usages like: QUrl someUrl("qrc:/MyQmlModule/MyResource1.png"); // need to be changed to QUrl someUrl("qrc:/qt/qml/MyQmlModule/MyResource1.png"); // QML usages like: ":/MyQmlModule/MyResource1.png" // need to be changed to ":/qt/qml/MyQmlModule/MyResource1.png"
Siehe auch Verwendung des Qt Resource Systems mit QML.
Verwenden Sie loadFromModule, um Ihre QML-Dateien zu laden
Mit dem Standard-Importpfad können Sie die loadFromModule
-Methoden verwenden, wie z.B. QQmlApplicationEngine::loadFromModule, QQuickView::loadFromModule, oder QQmlComponent::loadFromModule, zum Beispiel.
Verwenden Sie zum Beispiel loadFromModule
, um Ihre QML-Datei zu laden:
engine.load(QUrl(QStringLiteral("qrc:/MyQmlModule/Main.qml"))); // becomes engine.loadFromModule("MyQmlModule", "Main");
Ersetzen Sie OUTPUT_DIRECTORY und IMPORT_PATH durch DEPENDENCIES TARGET
Vermeiden Sie das Setzen eines IMPORT_PATH
in qt_add_qml_module. Verwenden Sie stattdessen DEPENDENCIES TARGET
, um Abhängigkeiten zu anderen QML-Modulen zu deklarieren, die nicht im aktuellen Importpfad gefunden werden können.
Die Verwendung von DEPENDENCIES TARGET
macht auch die CMake-Variable QT_QML_OUTPUT_DIRECTORY
und das Argument OUTPUT_DIRECTORY
in qt_add_qml_module überflüssig, also entfernen Sie deren Definitionen und Verwendungen.
Ein Beispiel:
### in the CMakeLists.txt file defining the dependent QML module: # don't set QT_QML_OUTPUT_DIRECTORY and remove lines like these: set(QT_QML_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/qml) qt_add_qml_module(MyThirdPartyQmlLibraryDependency URI MyThirdPartyQmlLibraryDependency .... # custom output paths are obsolete due to DEPENDENCIES TARGET below, so remove: OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/qml } ### in the CMakeLists.txt file defining the QML module that uses the dependency: qt_add_qml_module(MyQmlLibrary URI MyQmlModule ... # replace import paths like these: IMPORT_PATH ${CMAKE_CURRENT_BINARY_DIR}/thirdparty/qml # with: DEPENDENCIES TARGET MyThirdPartyQmlLibraryDependency }
Hinweis: Möglicherweise müssen Sie add_subdirectory()
vor dem Aufruf von qt_add_qml_module in Ihrer CMakeLists.txt aufrufen, damit DEPENDENCIES TARGET
das Ziel findet.
Weitere Informationen über die Deklaration von Modulabhängigkeiten finden Sie unter Deklaration von Modulabhängigkeiten.
Siehe auch Änderungen an Qt QML und Portierung von QML-Modulen nach CMake.
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.