Y una función de una señal en QML
https://blog.csdn.net/iEearth/article/details/41801333
En Qt C ++ en, señales y ranuras es el mecanismo principal es los componentes de aplicación que interactúan con las redes neuronales de interfaz de usuario, también en QML, hay señal similar y mecanismo manipulador, señal de la señal es, a menudo decimos que un evento por señal de procesador de señal controlador para procesar la señal. Cuando se transmite una señal señales, procesadores de señal correspondientes controlador se activa, podemos hacer algo al procesador de señal controlador para procesar el evento de señal de la señal.
1, la señal Breve "HelloWorld"
El siguiente es un ejemplo sencillo:
importación QtQuick 2.3
QtQuick.Controls importación 1,2
rectángulo {
anchura: 360; altura: 200
Color: "azul claro"
botón {
text: "Salir"
anchors.centerIn: padres onClicked : Qt.quit ()
}
}
Hay un botón en un rectángulo, esto tiene un botón predeterminado de señal () se hace clic, habrá un procesador de señal correspondiente onClicked. Si hay una señal de señal (), entonces el procesador de señal controlador correspondiente es onSignal, nota ese caso, la señal tiene un procesador de señal recibe el parámetro y puede ser utilizado. Cuando hacemos clic en el botón de ejemplo el botón izquierdo del ratón, se enviará señal clicked (), el procesador de señal de disparo onClicked, aquí se llama la función Qt.quit () para salir de la aplicación.
2, controlador de atributo
Cuando el cambio de valor de atributo QML, automáticamente enviará una señal al cambio de valor de atributo correspondiente al formato del procesador de señal está en <Propiedad> ha cambiado, ya sea incorporado en las propiedades QML, o nuestra atributo personalizado, una vez que el valor del atributo cambio dará lugar a un procesador de señal correspondiente, por ejemplo como sigue:
importación QtQuick 2.3
QtQuick.Controls importación 1,2
rectángulo {
anchura: 360; altura: 100
Color: "azul claro" onColorChanged : console.log ( "color cambió")
Botón {
text: "Cambio de color"
anchors.centerIn: padres
onClicked: parent.color = "amarilla"
}
}
Al hacer clic en el botón de botón, el color del rectángulo azul claro de la original, se convertirá en amarillo, a continuación, se disparará onColorChanged, la salida "color cambió".
3, signalhandler adicional
procesador de señal adicional recibe una señal del tipo de elemento adicional, en lugar del objeto actual, por ejemplo en los siguientes ejemplos y Teclas Componente:
importación QtQuick 2,3 rectángulo { id: rect anchura: 360; altura: 100 foco: true Keys.onSpacePressed : rect.color = Qt.rgba (Math.random (), Math.random (), Math.random (), 1) Component.onCompleted : rect.color = "green" }
Utilizamos el ejemplo descrito anteriormente Component.onCompleted, ajuste el componente de color se completa cuando el rectángulo es de color verde, también se utiliza Keys.onSpacePressed, Rectángulo aleatoria cambia de color cuando se presiona la barra espaciadora. Las matemáticas son un objeto de JavaScript, en el que directamente se puede utilizar porque QML es una extensión de JavaScript, JavaScript de la mayoría de las cosas.
4, utilizando las conexiones de controlador de conexión
En el ejemplo anterior, se utiliza directamente una señal en la señal del objeto actual en <señal> en la forma de un procesador de señal, pero en algunos casos que tenemos que utilizar para conectar una señal de conexiones, por ejemplo, cuando una pluralidad de objetos conectados a la misma señal, establecer una conexión, la conexión no se define en el objeto QML (tal como se define en C ++ objeto) objetos fuera del alcance de la señal transmitida, se ilustra:
importación QtQuick 2.3 Artículo { anchura: 500; altura: 150 Fila { Espaciado: 50 Rectángulo { anchura: 100; altura: 100 Color: "rojo" MouseArea { anchors.fill: padre onClicked : parent.color = Qt.rgba (Math.random (), Math.random (), Math.random (), 1) } } rectángulo { ID : rectYellow anchura: 100; altura: 100 de color: "amarillos" MouseArea { anchors.fill: padres Conexiones { onClicked: rectYellow.color = Qt.rgba (Math.random (), Math.random (), Math.random (), 1) } } } rectángulo { id: rectGreen anchura: 100; altura: 100 Color: "verde" MouseArea { id: mouseArea anchors.fill: padre } Conexiones { objetivo: mouseArea onClicked: rectGreen.color = Qt.rgba (Math.random (), Math.random (), Math.random ( ), 1) } } } }
El ejemplo anterior, incluyen tres uso. El primero, similar a la segunda uso, están conectados directamente en su alcance MouseArea, se puede ver conexiones Un segundo método puede omitirse, MouseArea especifica una región para controlar el evento del ratón, en el tercer método es el MouseArea alcance establecer una conexión fuera, tenía que utilizan conexiones, tres métodos son cambios aleatorios de color cuando se haga clic en un ratón rectángulo.
5, las señales de costumbre, la función
En QML, podemos personalizar las señales y funciones, primero tiene que declarar que, no como soporte de la sobrecarga como C ++, la sintaxis es la siguiente:
señal <signalname> [([<type> <parámetro de nombre> [, ...]])] función <functionName> ([<nombreParámetro> [, ...]]) {<body>}
Dado que las definiciones de señal y de función pueden tener parámetros, la diferencia es que la señal para indicar el tipo de parámetro, y la función que no necesitan, por lo que, debido a que el tipo de parámetro de los valores por defecto de función al tipo var Todopoderoso, pero no lo hizo como C ++ como debe especificar el tipo de valor de retorno, lo que sigue es un ejemplo de la integración:
importación QtQuick 2.3 Artículo { anchura: 600; altura: 100 Rectángulo { id: rect1 anchura: 100; altura: 100 Color: "azul claro" Texto { id: texto1 anchors.centerIn: padres texto: "costumbre \ n señal" } } rectángulo { id: rect2 width: 100; altura: 100 anchors.right: parent.right de color: "lightblue" función changeColor (obj) { obj.color = Qt.rgba (Math.random (), Math.random (), Math.random (), 1) } {texto ID: texto2 anchors.centerIn: padres texto: "Custom \ n-funtion" } } el componente { ID: colorComponent el Rectángulo { ID: ColorMaker width: 100; altura: 100 Señal colorMade (color COL) // señal de la MouseArea { anchors.fill: padre del onClicked : colorMaker.colorMade (colorMaker.color) // llamar a la señal de la función, la señal transmitida de manera similar colorMade } } } cargador { ID: redLoader anchors.left: rect1.right anchors.leftMargin: 50 sourceComponent: colorComponent la onLoaded: item.color = "red" } Cargador { ID: greenLoader anchors.right: rect2.left anchors.rightMargin: 50 sourceComponent: colorComponent la onLoaded: item.color = "Verde" } de las conexiones { // las audiencias la conexión de señales de función y las ranuras de destino: redLoader.item onColorMade: { // procesamiento función audiencias tanque señal rect2.changeColor (texto2) // text1.color COL = } } las conexiones { // la señales de objetos y las ranuras de función objetivo la conexión de destino: greenLoader.item onColorMade: {// función de señal de objeto de destino de procesamiento de ranura rect2.changeColor (texto2) text1.color COL = } } }
Este código combina una gran cantidad de puntos de conocimiento, parece un poco complicado, y vamos a ver y analizar. En rect2 una función personalizada changeColor (obj), el color de objeto obj se cambia al azar, los parámetros de función no están explícitamente indican su tipo, es un tipo dinámico. definición de componentes de un componente, donde nuestra señal personalizada es colorMade (color col), la señal de tipo de parámetro es que ser claramente identificados, el procesador de señal puede utilizar este parámetro para enviar una señal usando la palabra clave emitir en C ++, en QML la señal es una función especial que se puede utilizar como funciones. componente Loader carga dinámicamente un atributo de elemento guardado es que sus componentes se cargan, y luego usar conexiones para conectar nuestra señal de costumbre, el procesador de señal y llamar a nuestra función personalizada.
6, utilizando el connect () / desconexión ()
describe además un método de conexión de la señal, la señal misma función conectar () / desconexión () para conectar o desconectar las dos señales o un método, no hay mucho que decir, una mirada directa al código:
2,3 QtQuick importación de artículo { ID: Artículo empleador señal (String name) empleado de la señal (String name) // empleado de la función de la ranura onEmployee: Consola .log (nombre, "de señal de") función empleo (nombre) { la console.log (nombre , "de función") } Component.onCompleted: { // conectar una pluralidad de funciones ranuras señal empleador o señales item.employer. conectar (empleo) item.employer. conectar (empleado) empleador ( "Biblia") } }
Ejemplos están conectados por señal y otra función de la señal, relativamente simple, no introducen.
============== Fin