E uma função de um sinal em QML

E uma função de um sinal em QML

https://blog.csdn.net/iEearth/article/details/41801333

 

Em Qt C ++ em, sinais e faixas é o mecanismo principal é os componentes de aplicativos que interagem com as redes neurais UI, também em QML, há sinal semelhante & mecanismo manipulador, sinal de sinal é, muitas vezes dizemos que um evento por o processador de sinal de sinal manipulador para processar o sinal. Quando um sinal é transmitido sinais, processadores de sinal correspondentes manipulador é acionado, podemos fazer algo pelo processador de sinal manipulador para processar o evento de sinal de sinal.

 

1, sinal de Brief "HelloWorld"

O seguinte é um exemplo simples:

importação QtQuick 2.3 
QtQuick.Controls importação 1,2 

retangular { 
    largura: 360; height: 200 
    cor: "lightblue" 

    Botão { 
        texto: "Saia!" 
        anchors.centerIn: pai onClicked : Qt.quit () 
    } 
}
        

 

Existe um botão em um retângulo, isso tem um botão padrão clicado () sinal, haverá um processador de sinal correspondente onClicked. Se houver um sinal de sinal (), então o processador de sinal correspondente é manipulador onSignal, nota Nesse caso, o sinal tem um processador de sinal recebe o parâmetro e pode ser utilizado. Ao clicar no botão Exemplo do botão esquerdo do mouse, será enviado sinal clicado (), o processador de sinal de disparo onClicked, aqui chamado de função Qt.quit () para sair do aplicativo.

 

2, manipulador atributo

Quando a alteração do valor atributo QML, irá enviar automaticamente um sinal para a alteração do valor atributo correspondente ao formato do processador de sinal está em <Property> Mudou, seja embutido propriedades QML, ou o nosso atributo personalizado, valor do atributo uma vez mudança irá desencadear um processador de sinal correspondente, por exemplo como se segue:

importação QtQuick 2.3 
QtQuick.Controls importação 1,2 

retangular { 
    largura: 360; height: 100 
    cor: "lightblue" onColorChanged : console.log ( "cor mudou") 
    Botão { 
        texto: "Alterar cor" 
        anchors.centerIn: pai 
        onClicked: parent.color = "amarelo" 
    } 
}

    

 

Quando você clica no botão Botão, cor do retângulo do lightblue originais se tornará amarelo, em seguida, ele irá acionar onColorChanged, saída de "cor mudou".

 

3, signalhandler adicional

processador de sinal adicional recebe um sinal a partir do tipo de elemento adicional, ao invés do objecto actual, por exemplo, nos seguintes exemplos e Teclas Componente:

importação QtQuick 2,3 

retangular { 
    ID: rect 
    largura: 360; height: 100 

    foco: true Keys.onSpacePressed : rect.color = Qt.rgba (Math.random (), Math.random (), Math.random (), 1) Component.onCompleted : rect.color = "green" 
}
    

    

 

Usamos o exemplo descrito acima Component.onCompleted, definir o componente de cor é concluída quando o rectângulo é verde, também utilizado Keys.onSpacePressed, retangular aleatório muda de cor quando se pressiona a barra de espaço. Math é um objeto JavaScript, onde podemos diretamente ser usado porque QML é uma extensão do JavaScript, suporte JavaScript da maioria das coisas.

 

4, usando as ligações de conexão do manipulador

No exemplo anterior, usamos diretamente um sinal no sinal do objeto atual em <Signal> na forma de um processador de sinal, mas em alguns casos temos de usar para ligar um sinal Connections, por exemplo, quando uma pluralidade de objectos ligados ao mesmo sinal, estabelecer uma ligação, a ligação não é definida em QML objecto (tal como objecto definido em C ++) objetos fora do alcance do sinal transmitido, ilustrado:

importação QtQuick 2,3 

item { 
    largura: 500; altura: 150 

    Fila { 
        espaçamento: 50 

        retangular { 
            largura: 100; altura: 100 
            cor: "vermelho" 

            MouseArea { 
                anchors.fill: pai onClicked : parent.color = 
                		Qt.rgba (Math.random (), Math.random (), Math.random (), 1) 
            } 
        } 
        retangular { 
            ID : rectYellow 
            largura: 100; height: 100 
            cor: "amarelos" 
            MouseArea { 
                anchors.fill: pais Conexões {
                


                
                    onClicked: rectYellow.color = 
                    	Qt.rgba (Math.random (), Math.random (), Math.random (), 1) 
                } 
            } 
        } 

        retangular { 
            ID: rectGreen 
            largura: 100; altura: 100 
            cor: "verde" 

            MouseArea { 
                ID: MouseArea 
                anchors.fill: pai 
            } Ligações { 
                alvo: MouseArea 
                onClicked: rectGreen.color = 
                		Qt.rgba (Math.random (), Math.random (), Math.random ( ), 1) 
            } 
        } 
}

             
    }

 

O exemplo acima, incluem três uso. O primeiro, semelhante à segunda utilização, está directamente ligado no âmbito MouseArea, pode ver-se ligações Um segundo método podem ser omitidos, MouseArea especifica uma região a manipular o evento de rato, no terceiro método é a MouseArea escopo estabelecer uma conexão fora, tinha de conexões de uso, três métodos são muda de cor aleatória quando um clique do rato retângulo.

 

5, os sinais personalizados, função

Em QML, podemos personalizar os sinais e funções, primeiro você precisa declarar que, não como suporte a sobrecarga como C ++, a sintaxe é a seguinte:

sinal <signalName> [([<type> <parâmetro name> [, ...]])] 
função <functionName> ([<parameterName> [, ...]]) {<body>}

Desde as definições de sinal e de função podem ter parâmetros, a diferença é que o sinal para indicar o tipo de parâmetro, ea função que eles não precisam, por isso, porque o tipo de parâmetro dos padrões de função para o Todo-Poderoso tipo var, mas não gostou C ++ como deve especificar o tipo de valor de retorno, o seguinte é um exemplo da integração:

importação QtQuick 2,3 

item { 
    largura: 600; altura: 100 

    retangular { 
        ID: rect1 
        largura: 100; height: 100 
        cor: "lightblue" 

        Texto { 
            ID: text1 
            anchors.centerIn: pai 
            texto: "custom \ n sinal" 
        } 
    } 

    Retângulo { 
        ID: rect2 
        width: 100; altura: 100 
        anchors.right: parent.right 
        cor: "azul claro" 

        função changeColor (obj) { 
            obj.color = Qt.rgba (Math.random (), Math.random (), Math.random (), 1) 
        } 

        texto {
            ID: text2 
            anchors.centerIn: pai 
            texto: "Custom \ n-funtion" 
        } 
    } 

    o componente { 
        ID: colorComponent 

        o retângulo { 
            ID: colorMaker 
            width: 100; height: 100 Signal colorMade (COL Cor) // sinalizar 
            o MouseArea { 
                anchors.fill: pai a onClicked : colorMaker.colorMade (colorMaker.color) // chamar o sinal de função, o sinal transmitido de forma semelhante colorMade 
            } 
        } 
    } 
    carregador { 
        ID: redLoader 
        anchors.left: rect1.right 
        anchors.leftMargin: 50

            

                 

        sourceComponent: colorComponent 
        o OnLoaded: item.color = "Red" 
    } 
    carregador { 
        ID: greenLoader 
        anchors.right: rect2.left 
        anchors.rightMargin: 50 
        sourceComponent: colorComponent 
        o OnLoaded: item.color = "Green" 
    } 

    as conexões { // o público ligar os sinais de função e ranhuras 
        alvo: redLoader.item 
        onColorMade: { // processamento da função de audiências tanque sinalizar 
            rect2.changeColor (text2) // 
            text1.color COL = 
        } 
    } 

    as conexões { // a função de sinais de objectos e ranhuras alvo conexão 
        alvo: greenLoader.item 
        onColorMade: {// ranhura função do sinal do objecto alvo processamento 
            rect2.changeColor (text2) 
            text1.color COL = 
        } 
    } 
}

 

Este código combina um monte de pontos de conhecimento, parece um pouco complicado, e vamos ver e analisar. Em rect2 uma função personalizada changeColor (obj), a cor do objecto obj é alterada de forma aleatória, os parâmetros de função não são explicitamente indicar o seu tipo, é um tipo dinâmico. definição de componente de um componente, onde o nosso sinal personalizado é colorMade (cor col), o sinal de tipo de parâmetro deve ser claramente identificado, o processador de sinal pode usar esse parâmetro para enviar um sinal utilizando palavras-chave emitem em C ++, em QML sinal é uma função especial que pode ser usado como funções. componente do carregador carregar dinamicamente um atributo item salvo é que seus componentes são carregados e, em seguida, usar conexões para ligar o nosso sinal de costume, o processador de sinal e chamar a nossa função personalizada.

 

6, usando o conexão () / desconexão ()

Descreve ainda um método de conexão de sinal, o sinal em si conectar function () / disconnect () para ligar ou desligar os dois sinais ou um método, não há muito a dizer, um olhar directo sobre o código:

2.3 QtQuick Import 

item { 
    ID: Item 

    Signal Empregador (String name) 
    empregado Signal (String name) // empregado da função ranhura     onEmployee: Console log (nome, "Signal de") 
    a função emprego (nome) { 
        o console.log (nome , "de função") 
    } 
    Component.onCompleted: { // ligar uma pluralidade de ranhuras de sinal empregador funções ou sinais 
        item.employer. conectar (empregar) 
        item.employer. conectar (Funcionário) 
        empregador ( "Bíblia") 
    } 
}


 

Exemplos são ligados pelo sinal e outra função de sinal, relativamente simples, não introduzidos.

============== End

 

Acho que você gosta

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