Migrar componentes QML1 a QML2


([N3] Jose) #1

Buenas noches al foro , a ver si alguien me puede ayudar.

Estoy migrando los componentes QML1 A QML2 de mis aplicaciones para poder actualizarme a la versión 7.21.
El problema que tengo es que por ejemplo, en un formulario QML en el que mostraba un reloj analógico, al cambiar el “import QtQuick 1.1” por “import QTQuick 2.4”, el formulario aparece en blanco y no muestra nada.

Le he dado mis vueltas y no se a que puede ser debido.
Lo curioso es que el código QML funciona perfectamente en el probador QML de los ejercicios de Paco Satué.

Alguna idea?
El código es el siguiente:

Gracias de antemano.

import QtQuick 2.4

// Uso de ficheros en formato vectorial SVG
// Adaptación del ejemplo https://github.com/elpuri/qml-swiss-railways-clock-svg

// Se ha utiizado el reloj svg de http://codepen.io/jaredkhan/pen/Elrsx

Item {
id: clock;
anchors.fill: parent;
anchors.margins: 30;

property real hours: 0;
property real minutes: 0;
property real seconds: 0;
property real escala: clockFace.width / 400;
// El reloj se adapta al contenedor conservando la proporción ancho/alto
property bool mas_alto: width < height;

Rectangle {
	anchors.fill: parent;
	color: "WhiteSmoke"
}

Image {
	// Reloj
	id: clockFace;
	smooth: true
	width: mas_alto ? parent.width : parent.height;
	height: width;
	source: "qml_svg/reloj_fondo.svg";
	anchors.centerIn: parent;

	Image {
		// Horas
		source: "qml_svg/reloj_horas.svg";
		smooth: true;
		width: parent.width;
		height: width;
		transform: Rotation {
			origin.x: ((clock.mas_alto ? width : height) / 2) + (5 * escala);
			origin.y: ((clock.mas_alto ? width : height) / 2) - (10 * escala);
			angle: (clock.hours * 30) + (minutes * 0.5);
			Behavior on angle {
				SpringAnimation { spring: 2;damping: 0.2;modulus: 360 }
			}
		}
	}
	Image {
		// Minutos
		source: "qml_svg/reloj_minutos.svg";
		smooth: true;
		width: parent.width;
		height: width;
		transform: Rotation {
			origin.x: ((clock.mas_alto ? width : height) / 2) + (4 * escala);
			origin.y: ((clock.mas_alto ? width : height) / 2) - (12 * escala);
			angle: (clock.minutes * 6)  + (6 / (60 / clock.seconds));
			Behavior on angle {
				SpringAnimation { spring: 2;damping: 0.2;modulus: 360 }
			}
		}
	}
	Image {
		// Segundos
		source: "qml_svg/reloj_segundos.svg";
		smooth: true;
		width: parent.width;
		height: width;
		transform: Rotation {
			origin.x: ((clock.mas_alto ? width : height) / 2) + (4.5 * escala);
			origin.y: ((clock.mas_alto ? width : height) / 2) - (10.5 * escala);
			angle: clock.seconds * 6;
			Behavior on angle {
				SpringAnimation { spring: 2;damping: 0.2;modulus: 360 }
			}
		}
	}
}

Timer {
   // Actualización del reloj
	id: lahora
	interval: 1000;
	running: false;
	// A false permite visualizar la animación inicial de las agujas
	triggeredOnStart: false;
	repeat: true;
	onTriggered: {
		// mostrarMensaje(segundos.height)
		var d = new Date();
		clock.hours = d.getHours();
		clock.minutes = d.getMinutes();
		clock.seconds = d.getSeconds();
	}
}

Component.onCompleted: {
	// mostrarMensaje("Ancho: " + clockFace.width + "\n" + "Alto: " + clockFace.height);
	lahora.start();
}

}


([N3] pacosatu) #2

Hola Jose.

En QML2 de Velneo 21 puedes usar import QtQuick 2.6 que corresponde a la Release Qt 5.6.

Para visualizar el reloj SVG tienes que darle dimensiones al elemento principal Item.

  • Quita la líneas “anchors.fill: parent;” y “anchors.margins: 30;”
  • Añade la línea “width: 120; height: width;”
  • Revisa la propiedad source de los elementos Image.
  • En el formulario QML de Velneo puedes poner la propiedad Redimensionamiento a Expandir/Contraer.

Pruébalo.
Saludos
Paco Satué


([N3] Jose) #3

Muchas gracias Paco. Solucionado!!


([N1] robertocofiex) #4

Hola a mi me da error “el modulo QtQuick no está instalado”

he cambiado en el QML

import QtQuick 1.0

por

import QtQuick 2.6

y sigue sin funcionar.

Alguna sugerencia???


([N1] aztecmexico) #5

Buen día robertocofiex,

No basta con cambiar solo el import, de la versión 1.0 a la 2.6 tambien cambia la estructura del código, muchas cosas desaparecen y hay nuevas, lo malo que es difícil encontrar qué cosas son las que cambian, como las estructuras y la forma de definir el Item ya dentro del código.

Te tendrás que echar un clavado a la documentación de QT y ver si hay algún documento que indique los cambios principales entre versiones.

Saludos.