Principio de señal y ranura en Qt

1. ¿Qué es el mecanismo de señal y ranura?

  Las señales y las ranuras (señal y ranura) se utilizan para comunicarse entre dos objetos. En términos sencillos, un objeto envía una señal y el otro objeto realiza la acción correspondiente (por ejemplo, en un juego de carrera, el árbitro hace un disparo señal, los atletas empiezan a correr).

  Signal (Señal): Equivale a enviar una notificación de evento.

  Ranura: Una ranura es en realidad una función, una serie de instrucciones ejecutadas en respuesta a una señal.

  Conectar: ​​El proceso de esta conexión, es decir, especificamos qué tipo de señal para ejecutar qué tipo de función de ranura.

  Solo las clases derivadas de QOBject en Qt admiten señales y ranuras. Principalmente dividido en dos categorías: 1. La clase Qt viene con él, 2. Definido por el usuario.

2. Señal

  Para las señales que vienen con Qt, generalmente solo necesita saber qué señales hay y usarlas directamente.Varias señales comunes en Qt son las siguientes:

void clicked(bool checked = false)

void pressed()

void released()

void toggled(bool check)

  Si desea usar una señal personalizada, primero debe escribir una nueva clase y dejar que herede algunas clases estándar de Qt. Si la clase que escribimos nosotros mismos quiere usar el mecanismo de ranura de señal en Qt, se deben cumplir las siguientes condiciones:   1 Esta clase debe derivarse de la clase QObject o su subclase   2. Agregue la macro Q_OBJECT al archivo de encabezado que define la clase   Requisitos:   1. La señal es una función miembro de la clase   2. El valor de retorno es de tipo nulo   3. El El nombre de la señal se puede especificar de acuerdo con la situación real   4. Los parámetros se pueden especificar a voluntad, y la señal también admite la sobrecarga void signal_test (int, int, char) 5.   Las señales deben declararse con las palabras clave palabras clave, que son similares a palabras clave como public   6. Funciones de señal Simplemente declare   7. Envíe una señal personalizada en el programa: la esencia de enviar una señal es llamar a la función de señal
  
  

  
  
  
  
  
  
  

  Cuando escribimos el código de la señal de emisión, se llamará a la ranura conectada a esta señal, entonces, ¿cómo ocurre esta llamada? Vamos a desentrañar los misterios uno por uno.

  Veamos un código de ejemplo:

class ZMytestObj : public QObject
{
    
    
Q_OBJECT
signals:
void sigMenuClicked();
void sigBtnClicked();
};

  El código del compilador después del preprocesamiento es el siguiente:


// SIGNAL 0
void ZMytestObj::sigMenuClicked()
{
    
    
QMetaObject::activate(this, &staticMetaObject, 0, 0);
}
 
// SIGNAL 1
void ZMytestObj::sigBtnClicked()
{
    
    
QMetaObject::activate(this, &staticMetaObject, 1, 0);

Entonces, la función de señal también se puede escribir de esta manera para definir.

3. Función de ranura

  Las características son:    1. El valor de retorno es nulo    2. Puede haber parámetros. El tipo y el número de parámetros deben corresponder a las señales correspondientes. El número de parámetros puede ser menor que la señal, pero no mayor. void slot_test( int); y el anterior void signal_test (int, int, char) corresponde a
  
  

4. Conecte la ranura de señal

  función de conexión

 //QT4
 connect(m_pPushBtn, SIGNAL(clicked(bool)), &signalTest, SLOT(slots_TestSlot1()));

 //QT5
 connect(m_pPushBtn, &QPushButton::clicked, &signalTest, &CSignalTest::slots_TestSlot1);

   Nota:    1. Una señal se puede conectar a múltiples funciones de ranura.Después    de que se activa la señal, se llaman todas las funciones de ranura y el orden de llamada es incierto.
  
     

      2. Una función de ranura puede ser    activada por múltiples señales conectadas a una de las señales, la función de ranura se llamará
     

      3.Conectar puede conectar la señal y    conectar la señal (m_pPushBtn, SIGNAL(clicked(bool)), &signalTest, SIGNAL(signals_TestSignls()));
     

Supongo que te gusta

Origin blog.csdn.net/AAAA202012/article/details/130580433
Recomendado
Clasificación