Funciones de señal y ranura en QT

Un mecanismo de señal y ranura
1 Concepto
    Señal y ranura es un mecanismo de comunicación definido en Qt para realizar la interacción entre objetos. Cuando un objeto cambia, se enviará una señal. Esta señal puede ser recibida por otros objetos. Se ejecutará una función miembro especificada (función de ranura).

Ilustración:

2 Definición
1) La clase que contiene la señal o la ranura debe ser una subclase de QObject
2) La señal está marcada con "señales:", la función de señal solo necesita ser declarada y la definición no puede escribirse
3) La ranura está marcada con "espacios públicos:", la función de ranura puede ser Una determinada señal establece una conexión y desencadena la ejecución de la función de ranura a través de una determinada señal; además, la función de ranura también se puede utilizar como una función miembro ordinaria, llamada directamente
4) la clase que contiene la señal o ranura, la macro "Q_OBJECT" debe agregarse en el frente, y el proyecto se construirá en el futuro , Llamará a moc (compilador de metaobjetos) para restaurar la señal o la ranura de la extensión de sintaxis al código estándar de C ++.

Formato de implementación de código:
      clase XX: public QObject {
          Q_OBJECT //
      señales
          moc : void sigFunc (void); //
      Ranuras públicas de la función de señal :
          void slotFunc (void) {...} // función de ranura
      };    


3 Conexión de señal y ranura
  QObject :: connect (
      const QObject * sender, // El objeto de envío de señal puede ser todos los tipos de subclase de QObject 
      const char * signal, // La función de señal
      const QObject * receptor, // El objeto receptor de señal puede ser QObject todos los tipos de subclase
      const char * method); // Función de ranura


  Nota :    
      SEÑAL (función de señal (tabla de parámetros)) // Convertir la función de señal a const char *
      SLOT (función de ranura (tabla de parámetros)) // Convertir la función de ranura a const char *
Caso: Crear una aplicación Qt, que contiene Una etiqueta y un botón para cerrar la etiqueta haciendo clic en el botón.

4 Los requisitos de sintaxis de conexión de señal y ranura
1) Los parámetros de señal y ranura deben ser consistentes
    QObject :: connect (A, SIGNAL (sigFunc (int)), B, SLOT (slotFunc (int))); // ok
    QObject :: connect ( A, SEÑAL (sigFunc (void)), B, SLOT (slotFunc (int))); // error

 La implementación de la función de ranura en la versión anterior de Qt:

     conectar (A, SEÑAL (sigFunc (int)), B, SLOT (slotFunc (int)));

 La implementación de la función de ranura en la nueva versión de Qt:

     conectar (A, Señal1, B, Ranura1);

Las características de la versión anterior de la función de función de ranura: las ventajas de los parámetros son intuitivas y las   desventajas no son la detección de tipo, por lo que no se recomienda utilizar


2) Puede transportar parámetros predeterminados de
    clase B {
        Q_OBJECT
    slots públicos:
        void slotFunc (int i = 0) {}
    };
    QObject :: connect (A, SIGNAL (sigFunc (void)), B, SLOT (slotFunc (void) )); // ok
3) Los parámetros de la función de señal pueden ser más que los parámetros de la función de ranura, se ignorarán los parámetros en exceso y    no será posible lo contrario
    QObject :: connect (A, SIGNAL (sigFunc (int)), B, SLOT (slotFunc (void ))); // ok
4) Una señal se puede conectar a múltiples funciones de ranura (una a muchas)
    QObject :: connect (A, SIGNAL (sigFunc (int)), B1, SLOT (slotFunc1 (int))); / / ok
    QObject :: connect (A, SIGNAL (sigFunc (int)), B2, SLOT (slotFunc2 (int))); // OK
    Nota: Si el objeto A envía preferencias, las funciones de ranura de B1 y B2 se ejecutarán
5) Se pueden conectar varias señales a la misma función de ranura al mismo tiempo (muchas a una)
    QObject :: connect (A1, SIGNAL (sigFunc1 (int)), B, SLOT (slotFunc (int))); // ok
    QObject :: connect (A2, SIGNAL ( sigFunc2 (int)), B, SLOT (slotFunc (int))); // ok
    Nota: si la señal de transmisión A1 o A2, la función B se ejecutará de ranura
6) dos señales La función se puede conectar directamente (señal en serie) // Comprender
    QObject :: connect (A1, SIGNAL (sigFunc1 (int)), A2, SIGNAL (sigFunc2 (int))); // OK
    Nota: cuando A1 envía una señal, está conectada La señal del objeto A2 también se enviará.

 

Las expresiones lambda también se usan muchas veces al aplicar funciones de ranura;

Expresión lambda: se usa para definir y crear objetos de función anónimos.

La sintaxis de Lambda es la siguiente:

              [Parámetro de objeto de función] ( parámetro de función de sobrecarga del operador) declaración mutable o de excepción-> tipo de valor de retorno {cuerpo de función}

              [] Es una expresión lambda, elige la forma de pasar

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

            1, transferencia de valor

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

            2, transferencia de dirección

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

Para un uso específico, consulte Baidu.

Publicado 9 artículos originales · elogiado 6 · visitas 1996

Supongo que te gusta

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