tutorial quick creator c++ qt include components qml

c++ - quick - Incluir otro archivo QML de un archivo QML



qt creator (3)

Hay otra pregunta en Stackoverflow sobre este asunto, pero no encuentro posible la solución aceptada. Así que vuelvo a preguntar porque la vieja pregunta está fuera de atención.

La situación es así. Tengo pantallas de aplicación definidas por ''main.qml'', ''feature1.qml'', ''feature2.qml''.

Estas pantallas comparten la misma barra de herramientas debajo de la barra de título. La barra de herramientas tiene varios elementos, por lo que copiar y pegar el código QML es una locura. Esta pregunta: ¿el archivo QML incluye - o un archivo monolítico (estructura del código QML)? dice que es posible usar el nombre del archivo QML como nombre del componente, pero no puedo hacerlo funcionar.

¿Alguna solución? con detalles pls.


Finalmente lo he sacado de internet. Digamos que el archivo que se incluirá es ''mycomponent.qml'' en esta estructura de directorios (Qt Quick):

projectdir/ qml/ projectname/ main.qml mycomponent.qml

El contenido de ''mycomponent.qml'' (por ejemplo):

Text { text:"Hello, Scooby Doo!"; }

Tenemos que cargarlo de esta manera (en ''main.qml''):

Rectangle { ... Loader { source:"mycomponent.qml"; } ... }


Consulte la documentación de Qt sobre componentes reutilizables.

El archivo QML importado define un tipo cuyo nombre es el mismo que el nombre de archivo (en mayúscula, menos el sufijo .qml). QML llama al tipo un componente reutilizable. Utiliza ese nombre de tipo para crear una instancia de un objeto en el documento QML de importación (archivo).

No es como incluir un lenguaje C, donde el texto del archivo incluido se inserta en el archivo incluido. Es más como importar el nombre de una clase en Python y luego crear una instancia de un objeto de esa clase en el archivo de importación. O algo similar a Javascript, el archivo importado está creando un objeto prototipo, y el archivo de importación se hereda de él prototípicamente. Excepto que tenga en cuenta la discusión sobre el objeto raíz y qué propiedades del componente estarán visibles (debido al alcance del documento de QML). No podrá acceder a todo en el archivo importado como si fuera una C, una importación de Python, o una herencia JS.


Supongamos que tiene un archivo llamado main.qml y un componente en otro archivo llamado MyCustomText.qml . Si ambos archivos están en el mismo directorio, puede cargar directamente el componente de esta manera:

// in Main.qml Rectangle { id: root MyCustomText { text: "This is my custom text element" } }

Si MyCustomText.qml está en otro subdirectorio, MyComponents por ejemplo, para agrupar todos sus componentes personalizados, primero debe import el directorio antes de usar el componente de la misma manera:

// in Main.qml import "MyComponents" Rectangle { id: root MyCustomText { text: "This is my custom text element" } }

Otra cosa importante a tener en cuenta es que los archivos QML siempre deben comenzar con una letra mayúscula si desea poder usarlos de esta manera.

Por supuesto, su solución Loader también funciona, pero esta es la forma más fácil de importar archivos QML en otros componentes.