Creación de un módulo QML reutilizable
El siguiente ejemplo muestra cómo crear una biblioteca que expone C++ a QML. La estructura de directorios del ejemplo es la siguiente:
├── CMakeLists.txt
└── example
└── mylib
├── CMakeLists.txt
├── mytype.cpp
├── mytype.hEl archivo toplevel CMakeLists.txt realiza algunas configuraciones básicas utilizando qt_standard_project_setup, y luego utiliza add_subdirectory para incluir el de 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)
Los subdirectorios están estructurados para corresponder a la URI del módulo QML, pero con los puntos sustituidos por barras. Es la misma lógica que utiliza el motor cuando busca un módulo en las rutas de importación. Seguir esta estructura de subdirectorios ayuda a las herramientas.
mytype.h declara una clase y utiliza las macros de registro declarativo para exponerla al motor.
En el subdirectorio CMakeLists.txt llamamos a qt_add_qml_module. En comparación con la construcción de una aplicación QML, la invocación es ligeramente diferente:
qt_add_qml_module(mylib
URI example.mylib
VERSION 1.0
SOURCES
mytype.h mytype.cpp
QML_FILES
MyQmlType.qml
)El objetivo para mylib no ha sido creado antes. Cuando el objetivo pasado a qt6_add_qml_module no existe, crea automáticamente un objetivo de biblioteca. Esto evita una llamada separada a qt_add_library. Para registrar tipos QML definidos en C++, añada sus archivos de cabecera y fuente como argumentos al parámetro SOURCES.
Cuando se construye el proyecto, además de la biblioteca, también se construye un plugin QML. La clase autogenerada del plugin extiende desde QQmlEngineExtensionPlugin. La propia librería mylib ya contiene el código para registrar los tipos con el motor. Sin embargo, esto sólo es útil en los casos en los que podemos enlazar con la biblioteca. Para hacer que el módulo sea utilizable en un archivo QML cargado por qml, la herramientaQML Runtime , se necesita un plugin que pueda ser cargado. El plugin es el responsable de enlazar con la librería y asegurarse de que los tipos se registran.
Tenga en cuenta que la generación automática del plugin sólo es posible si el módulo no hace nada más que registrar los tipos. Si se necesita hacer algo más avanzado como registrar un proveedor de imágenes en initializeEngine, todavía se necesita escribir manualmente el plugin. qt6_add_qml_module tiene soporte para esto con NO_GENERATE_PLUGIN_SOURCE.
Además, seguir la convención de distribución de directorios ayuda a las herramientas. Esa disposición se refleja en el directorio de compilación. Lo que significa que puedes pasar la ruta de tu directorio de compilación a la herramienta QML (a través de la bandera -I ), y encontrará el 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.