Sur cette page

Compilateur de scripts QML

Le compilateur de scripts QML compile les fonctions et les expressions des fichiers QML et JavaScript en un code octet pouvant être interprété ou compilé « juste à temps » par le moteur QML.

De plus, il compile certaines fonctions et expressions des fichiers QML en code C++, dans les limites imposées par la nature même de JavaScript. Il génère du code C++ pour les fonctions pouvant faire l'objet d'une analyse exhaustive. L'organigramme suivant explique le processus de compilation.

L'organigramme présente les schémas de compilation

Le compilateur de scripts QML est disponible en deux versions. L’une est qmlcachegen, qui fait partie de l’ Qt Quick Compiler. L’autre est qmlsc, qui fait partie de l’extension Qt Quick Compiler Extensions, réservée aux utilisateurs commerciaux.

qmlcachegen

qmlcachegen utilise le système de méta-objets et génère des recherches qu’il stocke dans un emplacement central, une unité de compilation. L’unité de compilation contient une représentation de la structure du document, une représentation compacte en bytecode pour chaque fonction et expression, ainsi que du code natif pour les fonctions et les liaisons que le compilateur comprend parfaitement. Le bytecode d’une unité de compilation peut être utilisé par le moteur QML pour éviter une recompilation et accélérer l’exécution.

qmlsc

qmlsc, quant à lui, étend les fonctionnalités de base de qmlcachegen en proposant deux modes supplémentaires.

mode statique

En mode statique, qmlsc part du principe qu’aucune propriété, quel que soit son type, exposée au C++ ne peut être masquée par des types dérivés. Cela élimine le mécanisme de vérification du masquage et permet de compiler davantage de code JavaScript en C++, ce qui se traduit au final par un code plus rapide.

Pour activer le mode statique dans qmlsc, vous devez passer --static via QT_QMLCACHEGEN_ARGUMENTS à qt_add_qml_module.

qt_add_qml_module(someTarget
...
)

set_target_properties(someTarget PROPERTIES
    QT_QMLCACHEGEN_ARGUMENTS "--static"
)

Avertissement : le mode statiquede qmlsc génère du code invalide si des propriétés sont masquées dans le document QML.

Mode direct

En mode direct, qmlsc part du principe que tous les types C++ utilisés dans votre code QML sont disponibles et peuvent être inclus sous forme d’en-têtes C++ dans le code généré. Le code généré accède alors aux propriétés ou les modifie en appelant directement les getters, les setters et les fonctions invoquables dans ces en-têtes, ce qui rend l'exécution encore plus rapide. Cela signifie que vous devez lier les API Qt privées dans CMake.

Avertissement : les API Qtprivées changent fréquemment. Vous devrez recompiler Qt à chaque nouvelle version.

Avertissement : si un type n’est défini que dans un plugin ou ne dispose pas d’en-tête, vous ne pouvez pas l’utiliser en mode direct.

Pour activer le mode direct, vous devez tenir compte des points suivants :

  • vous devez passer ` --direct-calls ` via ` QT_QMLCACHEGEN_ARGUMENTS ` à ` qt_add_qml_module`.
    qt_add_qml_module(someTarget
    ...
    )
    
    set_target_properties(someTarget PROPERTIES
        QT_QMLCACHEGEN_ARGUMENTS "--direct-calls"
    )
  • Liez tous les modules Qt privés pertinents plutôt que leurs équivalents publics.
    find_package(Qt6 COMPONENTS QmlPrivate QuickPrivate)
    
    qt_add_qml_module(someTarget
    ...
    )
    
    target_link_libraries(someTarget PRIVATE
        Qt::QmlPrivate
        Qt::QuickPrivate
        ...
    )
  • Ne définissez pas l'PLUGIN_TARGET de manière à ce qu'il corresponde à la cible de la bibliothèque sous-jacente.
    # direct mode will not function in this setup.
    qt_add_qml_module(someTarget
    PLUGIN_TARGET someTarget
    ...
    )

Limites lors de la compilation de JavaScript en C++

De nombreuses constructions JavaScript ne peuvent pas être représentées efficacement en C++. Le compilateur de scripts QML ignore la génération de code C++ pour les fonctions contenant de telles constructions et génère uniquement du bytecode destiné à être interprété ou exécuté via le compilateur Just-in-time. La plupart des expressions QML courantes sont assez simples : consultations de valeurs sur des QObjects, opérations arithmétiques, constructions if/else ou boucles simples. Celles-ci peuvent facilement être exprimées en C++, ce qui permet à votre application de s'exécuter plus rapidement.

Obtenir des statistiques sur la compilation des fonctions et des liaisons

Le compilateur de scripts QML enregistre des statistiques lors de la compilation de QML en C++. Celles-ci permettent de mieux comprendre la compilation des fonctions et des liaisons. Elles indiquent notamment la durée de la compilation, si celle-ci a abouti et, dans le cas contraire, quelle erreur en est à l’origine. Outre l’affichage de ces résultats par liaison ou par fonction, les statistiques sont également regroupées par fichier, par module et au niveau du projet. Cela permet d’avoir un aperçu rapide de la qualité de la compilation d’un projet.

Pour afficher les statistiques, appelez la cible CMake ` all_aotstats `.

La collecte des statistiques de compilation est activée par défaut. Pour la désactiver, définissez la variable CMake `QT_QML_GENERATE_AOTSTATS ` sur `OFF` avant le premier appel à ` qt_add_qml_module`.

Remarque : ces statistiques ne sont disponibles que pour les modules enregistrés via l’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.