Sur cette page

QQmlSA::ElementPass Class

class QQmlSA::ElementPass

Classe de base pour toutes les analyses statiques effectuées sur les éléments. Plus d'informations...

En-tête : #include <ElementPass>
CMake : find_package(Qt6 REQUIRED COMPONENTS QmlCompiler)
target_link_libraries(mytarget PRIVATE Qt6::QmlCompiler)
Héritages : QQmlSA::GenericPass

Fonctions publiques

ElementPass(QQmlSA::PassManager *manager)
virtual void run(const QQmlSA::Element &element) = 0
virtual bool shouldRun(const QQmlSA::Element &element)

Description détaillée

ElementPass est la plus simple des deux passes d'analyse. Elle prend en compte tous les éléments d'un fichier. La méthode shouldRun() peut être utilisée pour filtrer les éléments non pertinents, et la méthode run() effectue le travail initial.

Les tâches courantes qui se prêtent à une analyse ElementPass sont les suivantes

  • vérifier que les propriétés d'un élément ne sont pas combinées de manière absurde
  • valider les valeurs des propriétés (par exemple, qu'une propriété ne prend que certaines valeurs d'énumération)
  • vérifier le comportement dépendant du parent d'un élément (par exemple, ne pas utiliser Item::width lorsque l'élément parent est un Layout).

Comme le montre l'extrait ci-dessous, il est recommandé d'effectuer la résolution de type nécessaire dans le constructeur de l'ElementPass et de la mettre en cache dans les membres locaux, et d'implémenter un certain filtrage via shouldRun() pour que l'analyse statique reste performante.

using namespace QQmlSA;
class MyElementPass : public ElementPass
{
    Element myType;
    public:
        MyElementPass(QQmlSA::PassManager *manager)
        : myType(resolveType("MyModule", "MyType")) {}

        bool shouldRun(const Element &element) override
        {
            return element.inherits(myType);
        }
        void run(const Element &element) override
        {
            // actual pass logic
        }
}

Les ElementPass ont une vision limitée de la manière dont les propriétés d'un élément sont utilisées. Si vous avez besoin de ces informations, envisagez plutôt d'utiliser PropertyPass.

Remarque : ElementPass ne prend en compte que les types instanciables. Il n'est donc pas adapté à l'analyse des types attachés et des singletons. Ceux-ci doivent être traités via un PropertyPass.

Documentation sur les fonctions membres

ElementPass::ElementPass(QQmlSA::PassManager *manager)

Crée un objet ElementPass et utilise manager pour faire référence au gestionnaire de laissez-passer.

[pure virtual] void ElementPass::run(const QQmlSA::Element &element)

S'exécute si shouldRun() renvoie true. Effectue le calcul réel de la passe sur element. Cette méthode est destinée à être surchargée. Il n'est pas nécessaire d'appeler la méthode de base.

[virtual] bool ElementPass::shouldRun(const QQmlSA::Element &element)

Contrôle si la fonction run() doit être exécutée sur le site element donné. Les sous-classes peuvent remplacer cette méthode pour améliorer les performances de l'analyse en filtrant les éléments non pertinents.

L'implémentation par défaut renvoie inconditionnellement true.

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