Erstellen einer QML-Anwendung

In Erstellen einer C++-Konsolenanwendung haben wir die Datei CMakeLists.txt für eine einfache Konsolenanwendung gezeigt. Wir werden nun eine QML-Anwendung erstellen, die das Qt Quick Modul verwendet.

Dies ist die vollständige Projektdatei:

cmake_minimum_required(VERSION 3.16)

project(hello VERSION 1.0 LANGUAGES CXX)

find_package(Qt6 6.2 COMPONENTS Quick Gui REQUIRED)

qt_standard_project_setup(REQUIRES 6.5)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

qt_add_executable(myapp
    main.cpp
)

qt_add_qml_module(myapp
    URI hello
    QML_FILES
        main.qml
        FramedImage.qml
    RESOURCES
        img/world.png
)

target_link_libraries(myapp PRIVATE Qt6::Gui Qt6::Quick)

Gehen wir die Änderungen durch, die wir vorgenommen haben. Im Aufruf von find_package ersetzen wir Core durch Quick. Dadurch wird das Modul Qt6Quick lokalisiert und die Ziele Qt6::Quick bereitgestellt, mit denen wir später verlinken.

find_package(Qt6 6.2 COMPONENTS Quick Gui REQUIRED)

Wir rufen qt_standard_project_setup auf, und geben CMAKE_CXX_STANDARD und CMAKE_CXX_STANDARD_REQUIRED an. Indem wir REQUIRES 6.5 an qt_standard_project_setup übergeben, entscheiden wir uns für nützliche Voreinstellungen für qt_add_qml_module. Es aktiviert alle Qt CMake Richtlinien bis Version 6.5, insbesondere QTP0001, das ein vernünftiges Standard-Ressourcen-Präfix für QML-Module definiert.

qt_standard_project_setup(REQUIRES 6.5)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

Beachten Sie, dass die Anwendung immer noch gegen Qt6::Core linken wird, da Qt6::Quick davon abhängt.

qt_add_executable erstellt und finalisiert ein Anwendungsziel:

qt_add_executable(myapp
    main.cpp
)

qt_add_qml_module übergibt das Ziel der ausführbaren Datei, eine URI, die Modulversion und eine Liste von QML-Dateien, um sicherzustellen, dass myapp ein QML-Modul wird. Dadurch werden die QML-Dateien in qrc:/qt/qml/${URI} im Ressourcendateisystem abgelegt. Außerdem sorgt qt_add_qml_module dafür, dass qmlcachegen ausgeführt wird. Außerdem wird ein myapp_qmllint Ziel erstellt, das qmllint auf den Dateien in QML_FILES ausführt.

qt_add_qml_module(myapp
    URI hello
    QML_FILES
        main.qml
        FramedImage.qml
    RESOURCES
        img/world.png
)

Durch das Hinzufügen der referenzierten Ressourcen werden diese automatisch der Anwendung unter demselben Wurzelpfad wie die QML-Dateien hinzugefügt - ebenfalls im Ressourcendateisystem. Indem wir den Pfad im Ressourcensystem mit dem im Quell- und Bauverzeichnis konsistent halten, stellen wir sicher, dass das Bild immer gefunden wird, da es relativ zu FramedImage.qml aufgelöst wird. Er verweist auf das Bild im Ressourcendateisystem, wenn wir main.qml von dort laden, oder auf das Bild im eigentlichen Dateisystem, wenn wir es mit dem Tool qml überprüfen.

Im Befehl target_link_libraries verlinken wir gegen Qt6::Quick anstelle von Qt6::Core.

target_link_libraries(myapp PRIVATE Qt6::Gui Qt6::Quick)

© 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.