Funções de sinal e slot no QT

Um mecanismo de sinal e slot
1 Conceito
    Sinal e slot é um mecanismo de comunicação definido no Qt para realizar a interação entre objetos. Quando um objeto muda, um sinal será enviado. Este sinal pode ser recebido por outros objetos. Uma função de membro especificada (função de slot) será executada.

Ilustração:

2 Definição
1) A classe que contém o sinal ou slot deve ser uma subclasse de QObject
2) O sinal é marcado com "sinais:", a função de sinal só precisa ser declarada e a definição não pode ser gravada
3) O slot é marcado com "slots públicos:", a função de slot pode ser Um determinado sinal estabelece uma conexão e aciona a execução da função de slot por meio de um determinado sinal; além disso, a função de slot também pode ser usada como uma função de membro comum, chamada diretamente
4) a classe que contém o sinal ou slot, a macro "Q_OBJECT" precisa ser adicionada à frente e o projeto será construído no futuro , Ele chamará moc (compilador de meta-objetos) para restaurar o sinal ou slot da extensão de sintaxe no código C ++ padrão.

Formato de implementação de código:
      classe XX: public QObject {
          Q_OBJECT //
      sinais moc :
          voF sigFunc (void); // Função de sinal
      slots públicos:
          void slotFunc (void) {...} // slot function
      };    


3 Conexão de sinal e slot
  QObject :: connect (
      const QObject * remetente, // Objeto de envio de sinal, pode ser todos os tipos de subclasse de QObject 
      const char * sinal, // Função de sinal
      const QObject * receiver, // Objeto de recebimento de sinal, pode ser QObject todos os tipos de subclasses
      const char * method); // Slot function


  Nota :    
      SIGNAL (função de sinal (tabela de parâmetros)) // Converter a função de sinal em const char *
      SLOT (função de slot (tabela de parâmetros)) // Converter a função de slot em const char *
Caso: Crie um aplicativo Qt, que contém Um rótulo e um botão para fechá-lo clicando no botão

4 Os requisitos de sintaxe de conexão de sinal e slot
1) Os parâmetros de sinal e slot devem ser consistentes
    QObject :: connect (A, SIGNAL (sigFunc (int)), B, SLOT (slotFunc (int))); // ok
    QObject :: connect ( A, SIGNAL (sigFunc (vazio)), B, SLOT (slotFunc (int))); // erro

 A implementação da função de slot na versão antiga do Qt:

     conectar (A, SINAL (sigFunc (int)), B, SLOT (slotFunc (int)));

 A implementação da função de slot na nova versão do Qt:

     conectar (A, Sinal1, B, Slot1);

As características da versão antiga da função de função de slot: as vantagens dos parâmetros são intuitivas e as   desvantagens não são a detecção de tipo, portanto, não é recomendável usar


2) Pode transportar parâmetros padrão da
    classe B {
        Q_OBJECT
    slots públicos:
        slotFunc vazio (int i = 0) {}
    };
    QObject :: connect (A, SIGNAL (sigFunc (vazio)), B, SLOT (slotFunc (vazio)) )); // ok
3) Os parâmetros da função de sinal podem ser superiores aos parâmetros da função de slot, os parâmetros em excesso serão ignorados e o    contrário não será possível
    QObject :: connect (A, SIGNAL (sigFunc (int)), B, SLOT (slotFunc (void ))); // ok
4) Um sinal pode ser conectado a várias funções de slot (um para muitos)
    QObject :: connect (A, SIGNAL (sigFunc (int)), B1, SLOT (slotFunc1 (int))) / / ok
    QObject :: connect (A, SIGNAL (sigFunc (int)), B2, SLOT (slotFunc2 (int))); // OK
    Nota: Se o objeto A enviar preferências, as funções de slot de B1 e B2 serão executadas
5) Vários sinais podem ser conectados à mesma função de slot ao mesmo tempo (muitos para um)
    QObject :: connect (A1, SIGNAL (sigFunc1 (int)), B, SLOT (slotFunc (int))); // ok
    QObject :: connect (A2, SIGNAL (sigFunc2 (int)), B, SLOT (slotFunc (int))); // ok
    Nota: Não importa se A1 ou A2 envia um sinal, a função de slot de B será executada
6) Dois sinais A função pode ser conectada diretamente (sinal em série) // Entenda
    QObject :: connect (A1, SIGNAL (sigFunc1 (int)), A2, SIGNAL (sigFunc2 (int))); // OK
    Nota: Quando A1 envia um sinal, ele é conectado O sinal do objeto A2 também será enviado.

 

Expressões lambda também são usadas várias vezes ao aplicar funções de slot;

Expressão lambda: usada para definir e criar objetos de função anônimos.

A sintaxe do Lambda é a seguinte:

              [Parâmetro do objeto de função] ( Parâmetro da função de sobrecarga do operador) declaração mutável ou de exceção- > tipo de valor de retorno {corpo da função}

              [] É uma expressão lambda, escolha a maneira de passar

             [] () {Btn-> settext ("aaaa");};

            1, transferência de valor

             [=] () {Btn-> settext ("aaaa");};

            2, transferência de endereço

             [&] () {Btn-> settext ("aaaa");};

Para uso específico, consulte o Baidu.

Publicado 9 artigos originais · elogiado 6 · visitas 1996

Acho que você gosta

Origin blog.csdn.net/GG802312/article/details/105416807
Recomendado
Clasificación