Qt wiki will be updated on October 12th 2023 starting at 11:30 AM (EEST) and the maintenance will last around 2-3 hours. During the maintenance the site will be unavailable.
QML Hello World Tutorial/es
Tutorial “Hola Mundo” con QML
Este tutorial provee una introducción a QML, el lenguage de marcado de Qt Quick. Este tutorial no cubre todo; sólo hace énfasis en enseñar principios clave, las funciones se presentan tan pronto sea necesario.
A través de los distintos pasos de este tutorial aprenderemos acerca de los tipos básicos de QML, crearemos nuestros propios componentes QML con propiedades y signals, y crearemos una animación simpmle con la ayuda de estados y transicionnes.
El capítulo uno comienza con un programa mínimo de “Hola mundo” y en los siguientes capítulos presentaremos nuevos conceptos.
El código fuente del tutorial está ubicado en el directorio $QTDIR/examples/declarative/tutorials/helloworld.
Capítulos del tutorial:
- Tipos Básicos
- Componentes QML
- Estados y Transiciones
Tipos Básicos
El primer programa con QML es un simple “Hola mundo” que introduce algunos conceptos básicos de QML. La imagen de abajo muestra una captura de pantalla de este programa.
File:Declarative-tutorial1.png
El código QML para esta aplicación es el siguiente:
Revisión línea a línea
Importar
Primero importamos los tipos necesarios para este ejemplo. Muchos archivos QML importarán los tipos básicos de QML (como Rectangle [doc.qt.nokia.com] o Image [doc.qt.nokia.com]) utilizando:
Elemento Rectangle
Declaramos nuestro elemento raíz el cuál será de tipo Rectangle [doc.qt.nokia.com] (Rectángulo), uno de los tipos básicos de QML. Le asignamos un id con el cuál podremos referirnos a él posteriormente, en este caso le llamaremos page (página). También establecemos sus propiedades de ancho, alto y color mediante las palabras clave width, height y color.
El elemento Rectangle [doc.qt.nokia.com] tiene muchas otras propiedades (como posición en X y en Y) pero por ahora dejaremos que conserven sus valores por defecto.
Elemento Text
Definimos un elemento tipo Text [doc.qt.nokia.com] (Texto), el cuál será hijo del elemento Rectangle raiz y que mostrará el texto “Hello world!” La propiedad Y es utilizada para posicionar el texto de manera vertical a 30 pixeles por debajo de la parte superior de su padre.
Las propiedades font.pointSize (Tamaño de fuente) y font.bold (Negritas) están relacionadas con el tipo Font y es por ello que usan una notación con puntos (Tipo.propiedad).
La propiedad anchors.horizontalCenter (anclas.CentroHorizontal) se refiere al centro horizontal de un elemento. En este caso, especificamos que nuestro elemento helloText debe estar centrado horizontalmente en el elemento page. Consulte Anchor-based Layout [doc.qt.nokia.com] (Organización basada en anclas)
Las propiedades font.pointSize y font.bold properties están realacionadas con la fuente y utilizan la notación de punto [doc.qt.nokia.com].
Viendo el ejemplo
Para ver el ejemplo, ejecuta la herramienta QML Viewer [doc.qt.nokia.com] en el directorio bin) con el nombre del archivo como primer argumento. Por ejemplo, para ejecutar el ejemplo desde la localización de la instalación, debes escribir:
Componentes QML
Ahora agregaremos un selector de color a nuestra aplicación que servirá para cambiar el color de nuestro texto. La aplicación de esta sección del ejemplo se verá como en la siguiente imagen.
File:Declarative-tutorial2.png
El selector de color está hecho de seis celdas de distintos colores. Para evitar escribir el código varias veces, primero creamos un nuevo componente llamaco Cell (Celda/Casilla). Los componentes proveen maneras de definir un nuevo tipo que puede ser reutilizado en otros archivos QML. Un componente de QML es como una caja negra que interactua con el mundo exterior a través de propiedades, señales y slots y que generalmente está definido en su propio archivo QML (Para más detalles puedes ver Defining new Components (Definiendo nuevos componentes))
El nombre del componente siempre debe comenzar con una letra mayúscula.
El código del componente Cell (Cell.qml) es el siguiente:
Revisión Línea a Línea
El componente Cell (Celda)
El elemento raíz de nuestro componente será de tipo Item [doc.qt.nokia.com] (Elemento) y su id será container. El tipo Item es el elemento más básico de QML y es frecuentemente utilizado como contenedor para otros elementos.
Declaramos una propiedad llamada cellColor. Está propiedad será accesible desde fuera del componente y por lo tanto nos permitirá instanciar celdas de distintos colores. Esta propiedas es sólo un alias de una propiedad existente: El color del rectángulo que compone la celda. (Par más información puedes ver Agregar Nuevas Propiedades [doc.qt.nokia.com]).
Definimos una señal de nombre clicked (presionado) para nuestro componente y que tendrá un parámetro de tipo color, llamado color. Usaremos esta señal para cambiar el color del texto desde nuestro archivo main.
Definimos un elemento rectángulo que será hijo de nuestro elemento container y definimos sus propiedades.
Nuestro elemento Cell es básicamente un rectángulo de color igual a rectangle.id
La propiedad anchors.fill es una manera conveniente de establecer el tamaño de un elemento. En este caso el elemento rectangle tendrá el mismo tamaño que su padre. (consulte Layout basado en anclas [doc.qt.nokia.com])
Con el fin de cambiar el color del texto cuando presionemos una celda, creamos un elemento MouseArea [doc.qt.nokia.com] (Área de Mouse/Ratón) que tendrá el mismo tamaño que su padre.
El MouseArea [doc.qt.nokia.com] define una señal clicked esta señal se emita, queremos emitir nuestra propia señal clicked con el color del container como parámetro.
El archivo main de QML
En nuestro archivo de QML, usaremos nuestro componente Cell para crear el selector de color:
Creamos nuestro selector de color colocando 6 Cells de distinto color en un elemento Grid (tabla/rejllla).
Cuando la señal clicked de alguna Cell se disparé, estableceremos el color del texto que pasamos como parámetro al color del rectángulo que emite la señal.
Podemos reaccionar ante la emisión de cualquier señal de nuestros componentes a través de la propiedad “onNombreDeSeñal”.
Estados y Transiciones
Ahora haremos este ejemplo un poco más dinámico mediante states (estados) y transitions (transiciones). Haremos que nuestro texto se mueva hacia abajo, gire 180 grados y cambie su color a rojo al ser presionado.
La aplicación final se verá como en la siguiente imagen.
File:Declarative-tutorial3 animation.gif
Para ello es necesario cambiar el código de main.qml que quedará de la siguiente forma:
En la línea 17 creamos un nuevo estado llamado down (presionado) para nuestro elemento texto. Este evento será activado cuándo la MouseArea esté presionada y desactivado cuando se deje de presionar.
El estado down incluye un conjunto de cambios a las propiedades de nuestro estado por defecto definido implicitamente (es decir, como fue inicialmente definido). Especificamente, establecemos la propiedad y de text a 160, su rotación a 180 y el color a rojo.
Ya que no queremos que los cambios de propiedades cambien inmediatamente sino que lo hagan lentamente a través de una animación, definimos una transición entre nuestros dos estados (línea 22). from y to definen los estados inicial y final de la transición. En este caso queremos que la transición ocurra del estado por defecto al estado down.
Debido a que queremos que la misma transición se ejecute en reversa al regresar del estado down al estado por defecto, establecemos la propiedad reversible a true (verdadero). Esto es equivalente a escribir dos transiciones por separado, una para cada estado como origen y destino.
El elemento ParallelAnimation (Animación paralela) se asegura que los dos tipos de animación (propiedades numéricas y el color) comiencen al mismo tiempo. También es posible que cambien una después de la otra utilizando el elemento SequentialAnimation (Animación secuencial).
Para más detalles sobre estados y transiciones puedes ver QML States (Estados QML).