Qt Quick Compiler
Qt Quick Compiler 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
L'Qt Quick Compiler e se compose de deux éléments :
Remarque : qmltc, qmlsc et qmlcachegen sont des outils de compilation internes. Si vous devez vous soucier de leur invocation, c’est soit que vous écrivez un système de compilation, soit que vous faites quelque chose de travers.
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’autre code C++. Vous évitez ainsi une grande partie de la surcharge liée à l’utilisation d’ QQmlComponent pour créer des instances de vos types QML. Pour tirer parti 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 fonctionnalité de langage non prise en charge. Il n’a toutefois pas besoin de comprendre le code JavaScript présent 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 à la fois en bytecode efficace et en fonctions C++. Ce processus s'effectue automatiquement en arrière-plan si vous utilisez qt_add_qml_module pour spécifier vos modules QML. Pour plus d’informations sur les options disponibles permettant de contrôler différents aspects de la compilation QML, consultez la section 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 :
- Une représentation efficace de la structure du document
- Du code octet pour toutes les fonctions et 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é-générée pour charger plus rapidement le composant QML ainsi que 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 octet, soit compilées en code machine via une étape de compilation JIT au moment de l’exécution. Au moment de la compilation, une analyse de types plus approfondie peut être effectuée. 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 pouvant être compilées en C++. Pour plus d’informations sur ces limitations, consultez la section Limitations lors de la compilation de JavaScript en C++. Pour obtenir des statistiques sur la qualité de compilation d’un projet QML, consultez la section Obtention de statistiques sur la compilation des fonctions et des liaisons.
qmlsc sera utilisé à la place de qmlcachegen si les extensions « Qt Quick Compiler » sont installées. Il présente les fonctionnalités supplémentaires suivantes par rapport à qmlcachegen:
- Il peut compiler des documents en mode direct. Dans ce cas, les en-têtes C++ des types sous-jacents à d’autres composants QML sont directement inclus et les méthodes de ces types sont directement appelées. À l’inverse, en mode indirect, qmlcachegen ou qmlsc appellent les méthodes via le mécanisme de recherche également utilisé par l’interpréteur et le JIT.
- Il peut compiler des documents en mode statique. Dans ce cas, qmlsc part du principe qu’aucune propriété des types exposés en C++ ne peut être masquée par des types dérivés. Cela permet de compiler davantage de liaisons et de fonctions, mais génère du code invalide si des propriétés sont masquées.
Au lieu de produire du code C++ en sortie, qmlsc et qmlcachegen peuvent également générer des « fichiers de cache » aux extensions .qmlc, .jsc et .mjsc. Ceux-ci contiennent toujours chacun une unité de compilation QML et peuvent être chargés par le moteur QML afin d’éviter une recompilation. Ils ne peuvent toutefois contenir que la structure du document et le bytecode. La compilation des liaisons et des fonctions en C++ est omise si des fichiers de cache sont générés. Ni le système de construction CMake ni le système qmake proposés par Qt n’exposent cette fonctionnalité.
Résumé
Le tableau suivant résume les différences entre qmltc, qmlcachegen et qmlsc:
| qmltc | qmlcachegen | qmlsc |
|---|---|---|
| Compile les types QML en classes C++ | Compile les documents QML en unités de compilation QML | Compile les documents QML en unités de compilation QML |
| Le résultat généré constitue une alternative plus rapide à la création d'objets via ` QQmlComponent`. | Le résultat généré est utilisé en interne par le moteur QML pour éviter la recompilation et accélérer l’exécution. | Le résultat généré est utilisé en interne par le moteur QML pour éviter la recompilation et accélérer l'exécution. Les modes « Direct » et « Static » peuvent encore accélérer votre application. |
| Disponible pour toutes les versions de Qt | Disponible pour toutes les versions de Qt | Disponible 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.