QTP0004
Les répertoires supplémentaires contenant des fichiers QML dans un module QML nécessitent des fichiers qmldir supplémentaires.
Cette règle a été introduite dans Qt 6.8. Elle entraîne la génération par le système de compilation d’un fichier qmldir supplémentaire pour chaque répertoire supplémentaire contenant des fichiers QML dans un module QML.
L'activation de cette politique garantit que l'importation implicite de chacun des composants QML de votre module est identique à celle du module lui-même. Cela signifie que tous les composants peuvent se voir les uns les autres sans avoir à importer explicitement le module.
Le comportement par défaut ( OLD ) de cette politique est qu’un fichier `qmldir` n’est généré que pour le répertoire racine d’un module.
Le comportement par d’ NEW, cette politique génère un fichier `qmldir` distinct pour chaque répertoire contenant des fichiers QML au sein d’un module. Chaque fichier `qmldir` généré contient une directive ` prefer ` qui redirige l’importation implicite vers l’emplacement canonique de la ressource du module.
Contexte
Le moteur QML effectue toujours une importation implicite du répertoire dans lequel se trouve un fichier QML. Pour les fichiers situés dans le répertoire racine du module, cette importation implicite renvoie au module lui-même, de sorte que tous les composants frères sont visibles. Cependant, lorsque des fichiers QML sont placés dans des sous-répertoires, l’importation implicite renvoie alors à ce sous-répertoire. Les composants situés dans le sous-répertoire ne peuvent alors pas voir les autres composants du même module sans ajouter une instruction explicite ` import `. Cela constitue une source fréquente d’erreurs.
Grâce au comportement « NEW », le système de compilation génère un fichier qmldir dans chaque sous-répertoire, contenant une directive « prefer » pointant vers l’emplacement canonique des ressources du module. Ainsi, l’importation implicite de chaque fichier QML du module équivaut à l’importation du module lui-même, ce qui permet à tous les composants de se détecter mutuellement, quel que soit leur répertoire.
Exemple
Prenons l’exemple d’un module dont les fichiers QML sont répartis dans plusieurs sous-répertoires :
qt_add_qml_module(mymodule
URI MyModule
QML_FILES
Main.qml
controls/MyButton.qml
views/MyView.qml
)Il est souvent nécessaire que ` views/MyView.qml ` utilise ` MyButton ` depuis le sous-répertoire ` controls `. Avec le comportement « OLD », cela échoue sans message d’erreur : ` views/MyView.qml ` importe implicitement le sous-répertoire ` views `, de sorte que ` MyButton ` n’est pas trouvé à moins d’ajouter explicitement ` import MyModule `.
Avec le comportement « NEW », un qmldir supplémentaire est généré à la fois dans les sous-répertoires controls et views. Chacun redirige l’importation implicite vers l’emplacement canonique de la ressource du module, ce qui permet à views/MyView.qml d’utiliser MyButton et tout autre type du module sans importation explicite.
Vous pouvez définir explicitement cette politique dans votre projet avant d’appeler ` qt_add_qml_module()` :
qt_policy(SET QTP0004 NEW)Vous pouvez également appeler qt_standard_project_setup() avec une version d’ REQUIRES 6.8 ou ultérieure.
Qt 6.8 émet des avertissements si vous ne définissez pas explicitement la politique.
Remarque : le comportement d’une politique lors de l’ OLD est obsolète et pourrait être supprimé à l’avenir.
Voir également qt_policy(), qt_standard_project_setup(), qt_cmake_policies et 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.