Sur cette page

Qt Qml Compilateur

Le module Qt Qml Compiler contient des fonctionnalités partagées nécessaires aux outils QML tels que Qt Quick Compiler et qmllint. Il fournit également le cadre QQmlSA, qui peut être utilisé pour étendre les capacités d'analyse intégrées des outils.

Utilisation du module

L'utilisation de l'API C++ d'un module Qt nécessite l'établissement d'un lien avec la bibliothèque du module, soit directement, soit par l'intermédiaire d'autres dépendances. Plusieurs outils de construction disposent d'un support dédié à cet effet, notamment CMake et qmake.

Construction avec CMake

Utilisez la commande find_package() pour localiser le composant de module nécessaire dans le paquetage Qt6:

find_package(Qt6 REQUIRED COMPONENTS QmlCompiler)
target_link_libraries(mytarget PRIVATE Qt6::QmlCompiler)

Pour plus de détails, voir l'aperçu de la construction avec CMake.

Construction avec qmake

Pour configurer le module en vue de sa construction avec qmake, ajoutez le module en tant que valeur de la variable QT dans le fichier .pro du projet :

QT += QmlCompiler

Utilisation du cadre QQmlSA

Le module Qt Qml Compiler offre le cadre QQmlSA qui fournit des outils pour l'analyse statique du code QML. Ces outils peuvent aider à garantir la validité syntaxique et à mettre en garde contre les anti-modèles QML.

L'ajout d'une analyse statique à un programme QML se fait en écrivant des plugins. Ils exécuteront une collection de passes d'analyse sur les éléments et les propriétés du code QML. Les passes peuvent être enregistrées auprès d'un PassManager qui les conserve et peut être appelé pour analyser un élément et ses enfants. Une passe est une vérification d'une certaine règle ou condition évaluée sur des éléments ou des propriétés. Si la condition est remplie, la passe peut avertir l'utilisateur d'un problème identifié dans le code et peut-être même suggérer une correction. On parle de passe parce que l'analyse effectuée sur les éléments et les propriétés se fait en exécutant une série de passes successives. Chaque passe doit être responsable de l'identification d'un seul problème spécifique. La combinaison d'un ensemble de passes permet d'effectuer une analyse plus complexe et, ensemble, de former un plugin. Les passes d'éléments sont définies par deux composants principaux, à savoir shouldRun() et run(). Lors de l'analyse, le gestionnaire de passe exécute la passe sur chaque élément qu'il rencontre en parcourant les enfants de l'élément racine. Pour chaque élément, si shouldRun() évalué sur cet élément renvoie true, alors run() est exécuté sur cet élément.

Les passes sur les propriétés se déclenchent sur trois événements différents, à savoir lorsque la propriété est liée, lorsqu'elle est lue et lorsqu'elle est écrite. Ces événements peuvent être mis en œuvre en remplaçant respectivement les fonctions onBinding(), onRead() et onWrite().

Au fur et à mesure que le code se développe, le nombre d'éléments et de propriétés augmente. Effectuer les passes d'analyse statique sur chacun d'entre eux peut devenir coûteux. C'est pourquoi il est bon d'être granulaire lorsque l'on décide des éléments et des propriétés à analyser. Pour les éléments, shouldRun() est destiné à être une vérification peu coûteuse pour déterminer si run(), qui effectue le véritable calcul, doit être exécuté. Pour les propriétés, la sélection est effectuée lors de l'enregistrement des passes auprès du gestionnaire. La fonction registerPropertyPass() prend les chaînes moduleName, typeName et propertyName comme arguments. Celles-ci sont utilisées pour filtrer l'ensemble des propriétés affectées par la passe enregistrée.

Exemples

Le tutoriel d'analyse statique QML montre comment utiliser le cadre QQmlSA pour créer une passe qmllint personnalisée.

Référence

Licences

Qt Qml Le compilateur est disponible sous les licences commerciales de The Qt Company. En outre, il est disponible sous la licence publique générale GNU, version 3 avec l'exception Qt GPL 1.0. Voir Qt Licensing pour plus de détails.

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