Cómo definir señales en lenguaje QML y cómo usar las señales correctamente
[cpp] ver copia simple
Artículo {
id: root
ancho: unidades.gu(100)
alto: unidades.gu(75)
señal LuzRojaEncendida
señal LuzVerdeEn p>
señal amarillaLightOn
Rectángulo {
id: fondo
anclajes.relleno: padre
color: "negro"
propiedad int tamaño: ancho*0.7
Podemos ver que hemos definido tres señales. Son "redLightOn", "greenLightOn" y "YellowLightOn" respectivamente. El propósito de definir estas tres señales es enviar notificaciones cuando se encienden las luces roja, amarilla y verde. De esta forma, cualquier código interesado puede interceptar y procesar estas señales. ¡Tenga en cuenta que la primera letra de la señal debe estar en minúscula!
A continuación, enviemos estas señales en código JS. El código es el siguiente:
[cpp] ver copia simple
Temporizador {
intervalo: 1000
en ejecución: verdadero p>
repetir: verdadero
propiedad int recuento: 0
onTriggered: state == "red_amarillo_on" )
{
parent.state = "green_on" "
root.greenLightOn();
count++
}
si no ( parent.state == "amarillo_on" ) {
parent.state = "red_on"
redLightOn();
recuento = 0
}
si no {
cuenta++
}
}
}
}
}
Enviar una señal es realmente muy simple. Enviar directamente, como llamar a un método.
Para interceptar esta aplicación en nuestra sección de código podemos utilizar el siguiente método.
En "TrafficLight.qml", cambie el código a:
[cpp] ver copia simple
importar QtQuick 2.0
importar Ubuntu.0.1
importar "ui"
MainView {
// objectName para fines de prueba funcional (autopilot-qt5)
objectName: "mainView" p >
/ ¡Atención!
//¡Atención! applicationName debe coincidir con el campo "nombre" de la lista de clics
applicationName: "com.ubuntu.developer.liu-xiao-guo.TrafficLight"
/*
Esta propiedad permite que la aplicación cambie la orientación cuando se gira el dispositivo
. El valor predeterminado es falso.
*/
//orientaciónautomática: verdadero
ancho: unidades.gu(120)
alto: unidades.gu(80 )
Página {
id:principal
anclajes.fill: padre
Fila {
id: myrow
anclajes.parent.verticalCenter
espaciado: unidades.gu(5)
MyLight {
id:light
ancho: main.width/5
alto: ancho*3
onRedLightOn: {
console.log("la luz roja está encendida" )
}
}}
Conexiones {
objetivo: luz
onYellowLightOn: {
console.log("la luz amarilla está encendida")
}
}
}
función greenLightOn() {
console.log("la luz verde está encendida")
}
Component.onCompleted: {
light.greenLightOn. conectar(greenLightOn);
}
}
}
}
}
}
}
}
Para mayor claridad, he escrito tres métodos. Una es poner en mayúscula sólo la primera letra de la señal y anteponerla con "on". El segundo método es utilizar "conectar" para lograr la conexión de ranura. El tercer método consiste en conectar la señal directamente a la función JS. Después de ejecutar el programa, podemos ver el siguiente resultado en la ventana de resultados de la aplicación:
[cpp]Ver copia pura
Luz verde encendida
Luz amarilla encendida
La luz roja está encendida
La luz roja está encendida
La luz roja está encendida
La luz roja está encendida p>
La luz roja está encendida
La luz amarilla está encendida