Qt Quick Compilador
Qt Quick El compilador le permite procesar código QML y JavaScript en tiempo de compilación, en lugar de en tiempo de ejecución. Esto permite:
- Inicio más rápido de la aplicación
- Evaluación más rápida de enlaces y funciones
El compilador Qt Quick consta de dos componentes:
Nota: qmltc, qmlsc y qmlcachegen son herramientas de compilación internas. Si necesitas preocuparte por su invocación, o estás escribiendo un sistema de compilación, o estás haciendo algo mal.
El compilador de tipos QML
El compilador de tipos QML, (qmltc) compila tipos QML a clases C++. Estas clases C++ son entonces añadidas a tu aplicación y pueden ser instanciadas desde otro código C++. De este modo, puede evitar gran parte de la sobrecarga que supone utilizar QQmlComponent para crear instancias de sus tipos QML. Para beneficiarse de qmltc, debe adaptar su código C++ y hacer uso de las nuevas clases.
qmltc sólo puede compilar un documento QML si entiende completamente su estructura. Fallará si se encuentra una característica del lenguaje no compatible. Sin embargo, no es necesario que comprenda el código JavaScript de los enlaces y las funciones.
El compilador de scripts QML
El compilador de scripts QML(qmlsc y qmlcachegen) compila los enlaces y las funciones en un código de bytes eficiente y en funciones C++. Este proceso se realiza automáticamente entre bastidores si se utiliza qt_add_qml_module para especificar los módulos QML. Para obtener más información sobre las opciones disponibles para controlar distintos aspectos de la compilación de QML, consulte Almacenamiento en caché de fuentes QML compiladas.
En tiempo de compilación, para cada documento QML o JavaScript se crea un archivo C++ correspondiente y se incorpora a la aplicación. El archivo C++ contiene entonces una unidad de compilación QML, que consta de:
- Una representación eficiente de la estructura del documento
- código byte para todas las funciones y enlaces del documento
- Código C++ para las funciones y los enlaces que el compilador entiende perfectamente.
El motor QML no compila el código fuente QML o JavaScript en tiempo de ejecución, sino que utiliza la unidad de compilación predefinida para cargar el componente QML y sus funciones y enlaces con mayor rapidez. Las funciones y los enlaces compilados en C++ también pueden ejecutarse más rápidamente. Otros enlaces y funciones se interpretan directamente a partir del código de bytes o se compilan en código máquina mediante un paso de compilación JIT en tiempo de ejecución. En tiempo de compilación, se pueden realizar análisis de tipos más complejos. Por tanto, el código C++ generado suele ser más eficiente que el resultado de la compilación JIT.
Existen limitaciones en cuanto a las construcciones de JavaScript que se pueden compilar en C++. Para obtener más información sobre estas limitaciones, consulte Limitaciones al compilar JavaScript a C++. Para obtener estadísticas sobre la capacidad de compilación de un proyecto QML, consulte Obtención de estadísticas sobre la compilación de funciones y bindings.
qmlsc se utilizará en lugar de qmlcachegen si están instaladas las extensiones del compilador Qt Quick. Tiene las siguientes características adicionales sobre qmlcachegen:
- Puede compilar documentos en modo directo. En ese caso, las cabeceras C++ de los tipos que sustentan otros componentes QML se incluyen directamente y los métodos de esos tipos se llaman directamente. Por el contrario, en modo indirecto, qmlcachegen o qmlsc llaman a los métodos a través del mecanismo de búsqueda que también se utiliza en el intérprete y el JIT.
- Puede compilar documentos en Modo Estático. En ese caso, qmlsc asume que ninguna propiedad de los tipos expuestos a C++ puede ser sombreada por tipos derivados. Esto permite que se compilen más enlaces y funciones, pero genera código inválido si se ensombrece alguna propiedad.
En lugar de producir C++ como salida, qmlsc y qmlcachegen también pueden generar "archivos caché" .qmlc, .jsc y .mjsc. Éstos aún contienen una unidad de compilación QML cada uno, y pueden ser cargados por el motor QML para evitar una nueva compilación. Sin embargo, sólo pueden contener la estructura del documento y el código de bytes. La compilación de bindings y funciones a C++ se omite si se producen archivos de caché. Ni el sistema de compilación CMake ni el qmake ofrecidos por Qt exponen esta funcionalidad.
Resumen
La siguiente tabla resume las diferencias entre qmltc, qmlcachegen y qmlsc:
| qmltc | qmlcachegen | qmlsc |
|---|---|---|
| Compila tipos QML en clases C | Compila documentos QML en unidades de compilación QML | Compila documentos QML en unidades de compilación QML |
| La salida generada actúa como una alternativa más rápida a la creación de objetos basada en QQmlComponent. | El motor QML utiliza internamente la salida generada para evitar la recompilación y acelerar la ejecución. | El motor QML utiliza internamente la salida generada para evitar la recompilación y acelerar la ejecución. El modo directo y el modo estático pueden acelerar aún más su aplicación. |
| Disponible para todas las versiones de Qt | Disponible para todas las versiones de Qt | Disponible para clientes comerciales |
© 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.