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 paquetage Qt6, qui peut être chargé comme suit :

find_package(Qt6 REQUIRED COMPONENTS Qml)

Synopsis

qt_generate_foreign_qml_types(
    source_target
    destination_qml_target
)

Si les commandes sans version sont désactivées, utilisez qt6_generate_foreign_qml_types() à la place. Il prend en charge le même ensemble d'arguments que cette commande.

Description

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

Cela peut être utile lorsque l'on souhaite créer une bibliothèque avec une intégration QML optionnelle, 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 pas de QtQml ou QtQuick, mais uniquement de la cible 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.

Note : Afin de mettre en œuvre un comportement personnalisé, tel que l'exposition à QML d'une instance singleton existante avec son propre cycle de vie, vous devez ajouter des types personnalisés à votre bibliothèque QML (mylib_declarative dans l'exemple ci-dessus). En retour, vous devriez omettre les macros QML_ELEMENT et autres macros similaires des classes C++ originales afin que qt_generate_foreign_qml_types() ne génère pas plus de structures d'intégration QML pour elles. Les macros QML, ainsi que toutes les fonctions d'usine singleton, peuvent être ajoutées aux structures qui contiennent l'adresse 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.