Y una función de una señal en QML

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

 

Supongo que te gusta

Origin www.cnblogs.com/lsgxeva/p/12636909.html
Recomendado
Clasificación