En esta página

qt_generate_foreign_qml_types

Registra tipos de un objetivo en un módulo QML.

El comando está definido en el componente Qml del paquete Qt6, que puede cargarse de la siguiente manera:

find_package(Qt6 REQUIRED COMPONENTS Qml)

Sinopsis

qt_generate_foreign_qml_types(
    source_target
    destination_qml_target
)

Si los comandos sin versión están desactivados, utilice qt6_generate_foreign_qml_types() en su lugar. Admite el mismo conjunto de argumentos que este comando.

Descripción

qt_generate_foreign_qml_types extrae tipos marcados mediante macros de registro QML (como QML_ELEMENT) de source_target y los registra como tipos ajenos en el módulo QML destination_qml_target.

Esto puede ser útil cuando se desea crear una biblioteca con integración QML opcional, sin depender directamente 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)

Nota: En el ejemplo anterior, mylib no depende de QtQml ni de QtQuick, sino sólo del objetivo de cabecera QmlIntegration (para la cabecera qqmlintegration.h, que proporciona la macro QML_ELEMENT ).

El efecto es equivalente a utilizar QML_FOREIGN con structs personalizados en la biblioteca QML para exponer los tipos.

Nota: Para implementar un comportamiento personalizado, como exponer una instancia singleton existente con su propio ciclo de vida a QML, debe añadir tipos personalizados a su biblioteca QML (mylib_declarative en el ejemplo anterior). A su vez, debe omitir las macros QML_ELEMENT y similares de las clases C++ originales para que qt_generate_foreign_qml_types() no genere más structs de integración QML para ellas. Las macros QML, así como cualquier función de fábrica singleton, pueden añadirse a los structs que contienen 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.