Red de conocimiento informático - Material del sitio web - Cómo definir señales en lenguaje QML y cómo usar las señales correctamente

Cómo definir señales en lenguaje QML y cómo usar las señales correctamente

Abra la aplicación que creamos usando el SDK de Ubuntu. Luego abra el archivo "MyLight.qml". Agregue la siguiente declaración al principio del archivo:

[cpp] ver copia simple

Artículo {

id: root

ancho: unidades.gu(100)

alto: unidades.gu(75)

señal LuzRojaEncendida

señal LuzVerdeEn

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

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"

/ ¡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

La luz roja está encendida

La luz amarilla está encendida