Sur cette page

Création de plugins C++ pour QML

Création d'un plugin

L'QML engine e charge les plugins C++ pour QML. Ces plugins sont généralement fournis dans un module d'extension QML et peuvent fournir des types destinés à être utilisés par les clients dans les documents QML qui importent le module. Un module doit comporter au moins un type enregistré pour être considéré comme valide.

QQmlEngineExtensionPlugin est une interface de plugin qui vous permet de créer des extensions QML pouvant être chargées dynamiquement dans des applications QML. Ces extensions permettent de mettre des types QML personnalisés à la disposition du moteur QML.

Pour écrire un plugin d’extension QML :

  1. Sous-classez ` QQmlEngineExtensionPlugin ` et utilisez la macro ` Q_PLUGIN_METADATA()` pour enregistrer le plugin auprès du système de méta-objets Qt.
  2. Utilisez les macros ` QML_ELEMENT ` et ` QML_NAMED_ELEMENT()` pour déclarer des types QML.
  3. Configurez votre fichier de compilation.

    CMake :

    qt_add_qml_module(<target>
        URI <my.import.name>
        VERSION 1.0
        QML_FILES <app.qml>
        NO_RESOURCE_TARGET_PATH
    )

    qmake :

    CONFIG += qmltypes
    QML_IMPORT_NAME = <my.import.name>
    QML_IMPORT_MAJOR_VERSION = <version>
  4. Si vous utilisez qmake, créez un fichier qmldir pour décrire le plugin. Notez que CMake génère automatiquement ce fichier par défaut.

Les plugins d'extension QML sont destinés soit à des applications spécifiques, soit à des bibliothèques. Les plugins de bibliothèque doivent se limiter à l'enregistrement des types, car toute manipulation du contexte racine du moteur peut entraîner des conflits ou d'autres problèmes dans le code de l'utilisateur de la bibliothèque.

Remarque : lorsque vous utilisez l’API CMake `qt_add_qml_module `, un plugin est généré automatiquement pour vous. Il se charge de l’enregistrement des types. Vous n’avez besoin d’écrire un plugin personnalisé que si vous avez des exigences particulières, telles que l’enregistrement de fournisseurs d’images personnalisés. Dans ce cas, passez NO_GENERATE_PLUGIN_SOURCE à l’appel ` qt_add_qml_module ` pour désactiver la génération du plugin par défaut.

L'éditeur de liens pourrait supprimer par erreur la fonction d'enregistrement de type générée dans le cadre d'une optimisation. Vous pouvez éviter cela en déclarant un pointeur volatile synthétique vers cette fonction quelque part dans votre code. La fonction est générée par qmltyperegistrar et porte le nom « qml_register_types_ » concaténé à l'URI du module, les points étant remplacés par des traits de soulignement.

Si votre module s’appelle « my.module », vous ajouteriez la déclaration anticipée dans la portée globale :

void qml_register_types_my_module();

Ajoutez ensuite l’extrait de code suivant dans l’implémentation de n’importe quelle fonction faisant partie du même binaire que l’enregistrement :

volatile auto registration = &qml_register_types_my_module;
Q_UNUSED(registration);

Référence

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