En esta página

QTP0004

Los directorios adicionales con archivos QML en un módulo QML necesitan archivos qmldir adicionales.

Esta política se introdujo en Qt 6.8. Hace que el sistema de compilación genere un archivo qmldir adicional por cada directorio adicional que contenga archivos QML en un módulo QML.

Activar esta política garantiza que la importación implícita de cada uno de los componentes QML del módulo sea la misma que la del propio módulo. Esto significa que todos los componentes pueden verse entre sí sin importar explícitamente el módulo.

El comportamiento OLD de esta política es que sólo se genera un archivo qmldir para el directorio raíz de un módulo.

El comportamiento NEW de esta política es que para cada directorio con archivos QML de un módulo se genera un archivo qmldir independiente. Cada qmldir generado contiene una directiva prefer que redirige la importación implícita a la ubicación canónica de recursos del módulo.

Antecedentes

El motor QML siempre realiza una importación implícita del directorio en el que reside un archivo QML. En el caso de los archivos del directorio raíz del módulo, esta importación implícita se resuelve en el propio módulo, por lo que todos los componentes hermanos son visibles. Sin embargo, cuando los archivos QML se colocan en subdirectorios, la importación implícita resuelve a ese subdirectorio en su lugar. Los componentes del subdirectorio no pueden ver otros componentes del mismo módulo sin añadir una declaración explícita import. Esta es una fuente frecuente de errores.

Con el comportamiento NEW, el sistema de compilación genera un archivo qmldir en cada subdirectorio que contiene una directiva prefer que apunta a la ubicación canónica de recursos del módulo. Esto hace que la importación implícita de cada archivo QML del módulo sea equivalente a la importación del propio módulo, de modo que todos los componentes puedan encontrarse entre sí independientemente de su directorio.

Ejemplo

Considere un módulo con archivos QML divididos en varios subdirectorios:

qt_add_qml_module(mymodule
    URI MyModule
    QML_FILES
        Main.qml
        controls/MyButton.qml
        views/MyView.qml
)

Una necesidad común es que views/MyView.qml utilice MyButton desde el subdirectorio controls. Con el comportamiento OLD esto falla silenciosamente: views/MyView.qml importa implícitamente el subdirectorio views, por lo que MyButton no se encuentra a menos que añada import MyModule explícitamente.

Con el comportamiento NEW, se genera un qmldir extra en los subdirectorios controls y views. Cada uno redirige la importación implícita a la ubicación canónica de recursos del módulo, por lo que views/MyView.qml puede utilizar MyButton y cualquier otro tipo del módulo sin una importación explícita.

Puede establecer la política explícitamente en su proyecto antes de llamar a qt_add_qml_module():

qt_policy(SET QTP0004 NEW)

Alternativamente, llame a qt_standard_project_setup() con una versión de REQUIRES de 6.8 o posterior.

Qt 6.8 emite advertencias si no se establece explícitamente la política.

Nota: El comportamiento OLD de una política está obsoleto, y puede ser eliminado en el futuro.

Ver también qt_policy, qt_standard_project_setup(), qt_cmake_policies, y 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.