Compilador de scripts QML
El compilador de scripts QML compila las funciones y expresiones de los archivos QML y JavaScript en un código de bytes que puede ser interpretado o compilado Just-in-time por el motor QML.
Además, compila algunas funciones y expresiones de archivos QML en código C++, dentro de las limitaciones establecidas por la naturaleza de JavaScript. Genera código C++ para las funciones que pueden analizarse exhaustivamente. El siguiente diagrama de flujo explica el flujo de trabajo de compilación.

El compilador de scripts QML está disponible en dos versiones. Una es qmlcachegen, que forma parte del compiladorQt Quick . Otra es qmlsc, que forma parte del complemento comercial Qt Quick Compiler Extensions.
qmlcachegen
qmlcachegen utiliza el sistema de metaobjetos, genera búsquedas y las almacena en un lugar central, una unidad de compilación. La unidad de compilación contiene una representación de la estructura del documento, una representación compacta de código de bytes para cada función y expresión, y código nativo para las funciones y los enlaces que el compilador entiende completamente. El motor QML puede utilizar el código de bytes de una unidad de compilación para evitar tener que volver a compilar y acelerar la ejecución.
qmlsc
qmlsc, por su parte, amplía la funcionalidad base de qmlcachegen proporcionando dos modos adicionales.
modo estático
En modo estático, qmlsc asume que ninguna propiedad de los tipos expuestos a C++ puede ser ensombrecida por tipos derivados. Elimina el mecanismo de comprobación de sombras y permite compilar más código JavaScript a C++, generando finalmente un código más rápido.
Para activar el modo estático en qmlsc, debe pasar --static a través de QT_QMLCACHEGEN_ARGUMENTS a qt_add_qml_module.
qt_add_qml_module(someTarget
...
)
set_target_properties(someTarget PROPERTIES
QT_QMLCACHEGEN_ARGUMENTS "--static"
)Advertencia: qmlsc static-mode genera código inválido si alguna propiedad está sombreada en el documento QML.
modo directo
En modo directo, qmlsc asume que todos los tipos C++ utilizados en tu código QML están disponibles y pueden ser incluidos como cabeceras C++ en el código generado. Entonces el código generado accede o modifica propiedades llamando directamente a getters, setters y funciones invocables en esas cabeceras, lo que hace que la ejecución sea aún más rápida. Esto significa que tienes que enlazar con las APIs privadas de Qt en CMake.
Atención: Las APIs privadas de Qt cambian a menudo. Necesitarás recompilar Qt para cada nueva versión.
Advertencia: Si un tipo sólo está definido en un plugin o no tiene cabecera, no puedes usarlo en modo directo.
Para habilitar el modo directo, debes tener en cuenta lo siguiente:
- debes pasar
--direct-callsviaQT_QMLCACHEGEN_ARGUMENTSa qt_add_qml_module.qt_add_qml_module(someTarget ... ) set_target_properties(someTarget PROPERTIES QT_QMLCACHEGEN_ARGUMENTS "--direct-calls" ) - Enlaza todos los módulos Qt privados relevantes en lugar de sus homólogos públicos.
find_package(Qt6 COMPONENTS QmlPrivate QuickPrivate) qt_add_qml_module(someTarget ... ) target_link_libraries(someTarget PRIVATE Qt::QmlPrivate Qt::QuickPrivate ... ) - No configure
PLUGIN_TARGETpara que sea el mismo que el destino de la biblioteca de respaldo.# direct mode will not function in this setup. qt_add_qml_module(someTarget PLUGIN_TARGET someTarget ... )
Limitaciones al compilar JavaScript a C++
Muchas construcciones de JavaScript no pueden representarse eficazmente en C++. El compilador de scripts QML omite la generación de código C++ para las funciones que contienen dichas construcciones y sólo genera código de bytes para ser interpretado o ejecutado a través del compilador Just-in-time. Las expresiones QML más comunes son bastante simples: búsquedas de valores en QObjects, aritmética, construcciones simples if/else o bucles. Estas expresiones pueden expresarse fácilmente en C++, lo que agiliza la ejecución de la aplicación.
Obtención de estadísticas sobre la compilación de funciones y bindings
El compilador de scripts QML registra estadísticas al compilar QML a C++. Éstas pueden dar una idea de la compilación de funciones y enlaces y de si se ha realizado correctamente o qué error ha provocado el fallo. Además de mostrar estos resultados por enlace o función, las estadísticas también se resumen por archivo, por módulo y a nivel de proyecto. Esto puede dar una visión rápida de lo bien que se está compilando un proyecto.
Para mostrar las estadísticas, invoque el objetivo cmake all_aotstats.
La recopilación de estadísticas de compilación está activada por defecto. Para desactivarla, establezca la variable CMake QT_QML_GENERATE_AOTSTATS en OFF antes de la primera llamada a qt_add_qml_module.
Nota: Estas estadísticas sólo están disponibles para los módulos registrados a través de la API cmake qt_add_qml_module
© 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.