Sur cette page

qt_generate_foreign_qml_types

Enregistre les types d'une cible dans un module QML.

La commande est définie dans le composant « Qml » du paquet « Qt6 », qui peut être chargé comme suit :

find_package(Qt6 REQUIRED COMPONENTS Qml)

Syntaxe

qt_generate_foreign_qml_types(
    source_target
    destination_qml_target
)

Si les commandes sans version sont désactivées, utilisez plutôt qt6_generate_foreign_qml_types(). Elle prend en charge le même ensemble d’arguments que cette commande.

Description

qt_generate_foreign_qml_types extrait les types marqués via des macros d’enregistrement QML (comme QML_ELEMENT) depuis source_target et les enregistre en tant que types étrangers dans le module QML destination_qml_target.

Cela peut s’avérer utile lorsque l’on souhaite créer une bibliothèque avec une intégration QML facultative, sans dépendre directement de QML.

// myclass.h
#include <QtQmlIntegration/qqmlintegration.h>

class MyClass : public QObject
{
    QML_ELEMENT
    Q_OBJECT

    // [...]
};
# CMakeLists.txt
qt_add_library(mylib myclass.h ...)
target_link_libraries(mylib PRIVATE Qt::Core Qt::QmlIntegration)

qt_add_qml_module(mylib_declarative
  VERSION 1.0
  URI "mylib"
  ...
)
qt_generate_foreign_qml_types(mylib mylib_declarative)

Remarque : dans l’exemple ci-dessus, mylib ne dépend ni de QtQml ni de QtQuick, mais uniquement de la cible « header-only » QmlIntegration (pour l’en-tête qqmlintegration.h, qui fournit la macro QML_ELEMENT ).

L’effet est équivalent à l’utilisation de ` QML_FOREIGN ` avec des structures personnalisées dans la bibliothèque QML pour exposer les types.

Remarque : afin de mettre en œuvre un comportement personnalisé, tel que l’exposition à QML d’une instance singleton existante dotée de son propre cycle de vie, vous devez ajouter des types personnalisés à votre bibliothèque QML (mylib_declarative dans l’exemple ci-dessus). En contrepartie, vous devez omettre les macros ` QML_ELEMENT ` et similaires dans les classes C++ d’origine afin que `qt_generate_foreign_qml_types()` ne génère pas d’autres structures d’intégration QML pour celles-ci. Les macros QML, ainsi que toutes les fonctions de fabrique de singletons, peuvent être ajoutées aux structures contenant l’ QML_FOREIGN.

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