Sur cette page

QTP0004

Les répertoires supplémentaires contenant des fichiers QML dans un module QML nécessitent des fichiers qmldir supplémentaires.

Cette politique a été introduite dans Qt 6.8. Elle oblige le système de construction à générer 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 la même que celle du module lui-même. Cela signifie que tous les composants peuvent se voir les uns les autres sans importer explicitement le module.

Le comportement 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 NEW de cette politique est que pour chaque répertoire contenant des fichiers QML dans un module, un fichier qmldir séparé est généré. Chaque qmldir généré contient une directive prefer qui redirige l'importation implicite vers l'emplacement de ressource canonique du module.

Contexte

Le moteur QML effectue toujours une importation implicite du répertoire dans lequel réside un fichier QML. Pour les fichiers situés dans le répertoire racine du module, cette importation implicite se résout au module lui-même, de sorte que tous les composants frères sont visibles. Toutefois, lorsque les fichiers QML sont placés dans des sous-répertoires, l'importation implicite se réfère à ce sous-répertoire. Les composants du sous-répertoire ne peuvent alors pas voir les autres composants du même module sans ajouter une déclaration explicite import. Il s'agit d'une source fréquente d'erreurs.

Avec le comportement NEW, le système de construction génère un fichier qmldir dans chaque sous-répertoire contenant une directive prefer pointant vers l'emplacement de la ressource canonique du module. Ainsi, l'importation implicite de chaque fichier QML dans le module équivaut à l'importation du module lui-même, de sorte que tous les composants peuvent se retrouver quel que soit leur répertoire.

Exemple

Considérons 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
)

Un besoin courant est que views/MyView.qml utilise MyButton à partir du sous-répertoire controls. Avec le comportement OLD, cela échoue silencieusement : views/MyView.qml importe implicitement le sous-répertoire views, de sorte que MyButton n'est pas trouvé à moins que vous n'ajoutiez explicitement import MyModule.

Avec le comportement NEW, un qmldir supplémentaire est généré dans les sous-répertoires controls et views. Chacun redirige l'importation implicite vers l'emplacement de ressource canonique du module, de sorte que views/MyView.qml peut utiliser MyButton et tout autre type dans le module sans importation explicite.

Vous pouvez définir la politique explicitement dans votre projet avant d'appeler qt_add_qml_module():

qt_policy(SET QTP0004 NEW)

Sinon, appelez qt_standard_project_setup() avec une version de REQUIRES de 6.8 ou plus.

Qt 6.8 émet des avertissements si vous ne définissez pas explicitement la politique.

Note : Le comportement OLD d'une politique est déprécié et pourrait être supprimé à l'avenir.

Voir aussi 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.