Modernisierung von QML-Modulen
Qt Qml-Module sind in Qt 6 leistungsfähiger und benutzerfreundlicher geworden. In den folgenden Abschnitten wird beschrieben, wie Sie Qml-Module modernisieren können, die bereits qt_add_qml_module verwenden.
Siehe auch „QML-Module auf CMake portieren“ für Informationen dazu, wie ein QML-Modul auf die CMake-API von ` qt_add_qml_module ` portiert wird.
Verwenden Sie „qt_standard_project_setup“
„qt_standard_project_setup“ richtet unter anderem die für moderne QML-Module erforderlichen Qt-CMake-Richtlinien ein. Um Ihr QML-Modul zu modernisieren und Best Practices zu befolgen, rufen Sie „qt_standard_project_setup“ in der obersten „ CMakeLists.txt “-Datei des Projekts vor jedem Aufruf von „qt_add_qml_module“ auf:
qt_standard_project_setup(REQUIRES 6.8)Verwenden Sie das neue Standardpräfix für den Ressourcenpfad
Der Standard-Ressourcenpfad für QML-Module wurde mit QTP0001 von ` :/ ` nach ` :/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 ähnlichen Funktionen. Ändern Sie alle qrc-Pfade in Ihrem C++- und QML-Code so, dass sie das neue Ressourcenpfadpräfix 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-Ressourcensystems mit Qml“.
Verwenden Sie `loadFromModule`, um Ihre QML-Dateien zu laden
Mit dem Standard-Importpfad können Sie die Methoden von ` loadFromModule ` verwenden, wie beispielsweise ` QQmlApplicationEngine::loadFromModule`, ` QQuickView::loadFromModule` oder ` QQmlComponent::loadFromModule`.
Verwenden Sie „ loadFromModule “, um Ihre QML-Datei zu laden, zum Beispiel:
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 es, in ` qt_add_qml_module` einen ` IMPORT_PATH ` festzulegen. Verwenden Sie stattdessen ` DEPENDENCIES TARGET `, um Abhängigkeiten zu anderen QML-Modulen zu deklarieren, die im aktuellen Importpfad nicht gefunden werden können.
Durch die Verwendung von ` DEPENDENCIES TARGET ` entfallen zudem die CMake-Variable ` QT_QML_OUTPUT_DIRECTORY ` und das Argument ` OUTPUT_DIRECTORY ` für ` qt_add_qml_module`; entfernen Sie daher deren Definitionen und Verwendungen.
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üssenSie in Ihrer `CMakeLists.txt` die Funktion ` add_subdirectory() ` aufrufen, bevor Sie ` qt_add_qml_module ` aufrufen, damit ` DEPENDENCIES TARGET ` das Ziel finden kann.
Weitere Informationen zum Deklarieren von Modulabhängigkeiten finden Sie unter „Modulabhängigkeiten deklarieren“.
Siehe auch „Änderungen an Qt Qml “ und „QML-Module auf CMake portieren“.
© 2026 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.