Sur cette page

Qt Quick Compilateur

Qt Quick Le compilateur vous permet de traiter le code QML et JavaScript au moment de la compilation, plutôt qu'au moment de l'exécution. Cela permet

  • un démarrage plus rapide de l'application
  • une évaluation plus rapide des liaisons et des fonctions

Le compilateur Qt Quick se compose de deux éléments :

Note : qmltc, qmlsc et qmlcachegen sont des outils de construction internes. Si vous devez vous préoccuper de leur invocation, soit vous écrivez un système de compilation, soit vous faites quelque chose de mal.

Le compilateur de types QML

Le compilateur de types QML (qmltc) compile les types QML en classes C++. Ces classes C++ sont ensuite ajoutées à votre application et peuvent être instanciées à partir d'autres codes C++. De cette manière, vous pouvez éviter une grande partie des frais généraux liés à l'utilisation de QQmlComponent pour créer des instances de vos types QML. Pour bénéficier de qmltc, vous devez adapter votre code C++ et utiliser les nouvelles classes.

qmltc ne peut compiler un document QML que s'il en comprend parfaitement la structure. Il échouera s'il rencontre une caractéristique du langage qui n'est pas prise en charge. Il n'est cependant pas nécessaire qu'il comprenne le code JavaScript dans les liaisons et les fonctions.

Le compilateur de scripts QML

Le compilateur de scripts QML(qmlsc et qmlcachegen) compile les liaisons et les fonctions en un code d'octets efficace et en fonctions C++. Ce processus se déroule automatiquement dans les coulisses si vous utilisez qt_add_qml_module pour spécifier vos modules QML. Pour plus d'informations sur les options disponibles pour contrôler les différents aspects de la compilation QML, voir Mise en cache des sources QML compilées.

Au moment de la compilation, pour chaque document QML ou JavaScript, un fichier C++ correspondant est créé et intégré à l'application. Le fichier C++ contient alors une unité de compilation QML, qui se compose des éléments suivants

  • une représentation efficace de la structure du document
  • un code d'octets pour toutes les fonctions et les liaisons du document
  • du code C++ pour les fonctions et les liaisons que le compilateur comprend parfaitement.

Le moteur QML s'abstient alors de compiler le code source QML ou JavaScript au moment de l'exécution et utilise à la place l'unité de compilation préconstruite pour charger plus rapidement le composant QML, ses fonctions et ses liaisons. Les fonctions et les liaisons qui ont été compilées en C++ peuvent également être exécutées plus rapidement. Les autres liaisons et fonctions sont soit interprétées directement à partir du code byte, soit compilées en code machine via une étape de compilation JIT au moment de l'exécution. Au moment de la compilation, il est possible d'effectuer une analyse de type plus approfondie. Par conséquent, le code C++ généré est généralement plus efficace que le résultat de la compilation JIT.

Il existe des limitations quant aux constructions JavaScript qui peuvent être compilées en C++. Pour plus d'informations sur ces limitations, voir Limitations lors de la compilation de JavaScript en C++. Pour obtenir des statistiques sur la qualité de la compilation d'un projet QML, voir Obtenir des statistiques sur la compilation des fonctions et des bindings.

qmlsc sera utilisé à la place de qmlcachegen si les extensions du compilateur Qt Quick sont installées. Il présente les caractéristiques supplémentaires suivantes par rapport à qmlcachegen:

  • Il peut compiler des documents en mode direct. Dans ce cas, les en-têtes C++ des types qui sous-tendent d'autres composants QML sont directement inclus et les méthodes de ces types sont directement appelées. Inversement, en mode indirect, qmlcachegen ou qmlsc appellent les méthodes par le biais du mécanisme de recherche qui est également utilisé dans l'interpréteur et la JIT.
  • Il peut compiler des documents en mode statique. Dans ce cas, qmlsc suppose qu'aucune propriété d'un type exposé au C++ ne peut être cachée par un type dérivé. Cela permet de compiler davantage de liaisons et de fonctions, mais génère un code invalide si des propriétés sont masquées.

Au lieu de produire du C++ en sortie, qmlsc et qmlcachegen peuvent également générer des "fichiers cache" .qmlc, .jsc et .mjsc. Ceux-ci contiennent toujours une unité de compilation QML chacun, et peuvent être chargés par le moteur QML pour éviter une nouvelle compilation. Ils ne peuvent toutefois contenir que la structure du document et le code à octets. La compilation des liaisons et des fonctions en C++ est omise si des fichiers cache sont produits. Ni le système de construction CMake ni le système de construction qmake proposés par Qt n'exposent cette fonctionnalité.

Résumé

Le tableau suivant résume les différences entre qmltc, qmlcachegen et qmlsc:

qmltcqmlcachegenqmlsc
Compile les types QML en classes CCompile les documents QML en unités de compilation QMLCompile les documents QML en unités de compilation QML
La sortie générée agit comme une alternative plus rapide à la création d'objets basée sur QQmlComponent.La sortie générée est utilisée en interne par le moteur QML pour éviter la recompilation et accélérer l'exécution.La sortie générée est utilisée en interne par le moteur QML pour éviter la recompilation et accélérer l'exécution. Le mode direct et le mode statique peuvent accélérer davantage votre application.
Disponible pour toutes les versions de QtDisponible pour toutes les versions de QtDisponible pour les clients commerciaux

© 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.