Compiler un module QML réutilisable
L'exemple ci-dessous montre comment créer une bibliothèque qui expose du code C++ à QML. La structure de répertoires de l'exemple se présente comme suit :
├── CMakeLists.txt
└── example
└── mylib
├── CMakeLists.txt
├── mytype.cpp
├── mytype.hLe fichier d’ CMakeLists.txt, situé au niveau supérieur, effectue quelques configurations de base à l’aide de la fonction `qt_standard_project_setup()`, puis utilise ` add_subdirectory ` pour inclure le module situé dans `mylib` :
cmake_minimum_required(VERSION 3.16)
project(qmlmodule VERSION 1.0.0 LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(Qt6 REQUIRED COMPONENTS Qml)
qt_standard_project_setup(REQUIRES 6.5)
add_subdirectory(example/mylib)Les sous-répertoires sont structurés de manière à correspondre à l’URI du module QML, mais en remplaçant les points par des barres obliques. C’est la même logique que celle utilisée par le moteur lorsqu’il recherche un module dans les chemins d’importation. Le respect de cette structure de sous-répertoires facilite l’utilisation des outils.
mytype.h déclare une classe et utilise les macros d’enregistrement déclaratives pour l’exposer au moteur.
Dans le fichier CMakeLists.txt du sous-répertoire, nous appelons qt_add_qml_module(). Par rapport à la section « Création d’une application QML », l’appel est légèrement différent :
qt_add_qml_module(mylib
URI example.mylib
VERSION 1.0
SOURCES
mytype.h mytype.cpp
QML_FILES
MyQmlType.qml
)La cible « mylib » n’a pas encore été créée. Lorsque la cible transmise à qt6_add_qml_module n’existe pas, celle-ci crée automatiquement une cible de bibliothèque. Cela évite un appel distinct à qt_add_library(). Pour enregistrer les types QML définis en C++, ajoutez leurs fichiers d’en-tête et de source en tant qu’arguments du paramètre SOURCES.
Lors de la compilation du projet, outre la bibliothèque, un plugin QML est également généré. La classe générée automatiquement par le plugin hérite de ` QQmlEngineExtensionPlugin`. La bibliothèque `mylib` elle-même contient déjà le code permettant d’enregistrer les types auprès du moteur. Cependant, cela n’est utile que dans les cas où il est possible de lier le projet à la bibliothèque. Pour que le module soit utilisable dans un fichier QML chargé par qml, l’outil «QML Runtime », un plugin pouvant être chargé est nécessaire. Ce plugin est alors chargé d’effectuer la liaison avec la bibliothèque et de s’assurer que les types sont bien enregistrés.
Notez que la génération automatique du plug-in n’est possible que si le module ne fait rien d’autre que d’enregistrer les types. S’il doit effectuer une opération plus avancée, comme l’enregistrement d’un fournisseur d’images dans initializeEngine, vous devrez tout de même écrire le plug-in manuellement. La fonction qt_add_qml_module() prend en charge cette fonctionnalité avec NO_GENERATE_PLUGIN_SOURCE.
De plus, le respect de la convention de structure des répertoires facilite l’utilisation des outils. Cette structure se retrouve dans le répertoire de compilation. Cela signifie que vous pouvez transmettre le chemin d’accès à votre répertoire de compilation à l’outil QML (via l’indicateur -I ), et celui-ci trouvera le plugin.
© 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.