Qt alfabetización-Resumen de la teoría QEvent

I. Resumen

El bucle de eventos principal de Qt (QCoreApplication::exec()) obtiene eventos del sistema de ventana nativo de la cola de eventos, los convierte en QEvents y envía los eventos convertidos a QObjects.

Generalmente, los eventos provienen del sistema de ventanas subyacente (espontáneo() devuelve verdadero), pero los eventos también se pueden enviar manualmente mediante QCoreApplication::sendEvent() y QCoreApplication::postEvent() (espontáneo() devuelve falso).

Un objeto QObject recibe eventos llamando a su función QObject::event(). Esta función se puede volver a implementar en subclases para personalizar el manejo de eventos y agregar otros tipos de eventos . Casi todas las clases de ventana en Qt heredan QObject, por lo que podemos sobrecargar la función event() para interceptar mensajes.

QWidget::event() es un ejemplo notable. De forma predeterminada, los eventos se envían a los controladores de eventos como QObject::timerEvent() y Widget::mouseMoveEvent(). QObject::installEventFilter() permite que un objeto intercepte eventos enviados a otro objeto.

Un QEvent básico contiene solo un parámetro de tipo de evento y un indicador de "aceptar". Podemos establecer el indicador de aceptación con accept() y borrarlo con ignore(). Está configurado de forma predeterminada, pero no confíe en él, ya que las subclases pueden optar por borrarlo en sus constructores.

QEvent es la clase base de todas las clases de eventos Esta clase mantiene principalmente un tipo de evento y registra el tipo de evento.

2. Tipo de evento

QEvent en Qt mantiene las propiedades básicas del evento, donde el tipo de evento es un valor de enumeración:

QEvent también proporciona tipos de eventos predefinidos básicos, así como tipos de eventos que están abiertos a los usuarios.

De hecho, al igual que los mensajes de Windows, también proporciona mensajes autodefinidos.

1. Tipos definidos por Qt

Esta enumeración define los tipos de eventos válidos en Qt. Los tipos de eventos y las clases dedicadas para cada tipo son los siguientes:

inserte la descripción de la imagen aquí

Hay tantos, debe consultar los documentos de ayuda correspondientes, no necesita recordar esto, siempre que pueda descubrir cómo usarlo.

2. Abrir tipos definidos por el usuario

El valor del evento de usuario debe estar entre User y MaxUser:

tipo de evento valor significado
QEvent::Usuario 1000 Valor mínimo para eventos definidos por el usuario.
QEvent:MaxUsuario 65535 El último ID de evento de usuario.

Para mayor comodidad, se puede registrar y reservar un tipo de evento personalizado para la aplicación utilizando la función registerEventType(). Esta función también es estática, por lo que cuando la use, simplemente registre un tipo que desee usar cuando use la variable global.

Hacer esto evita reutilizar accidentalmente un tipo de evento personalizado que ya está en uso en otra parte de la aplicación.

3. Evento de registro

  • int QEvent::registerEventType(int sugerencia = -1)

Esta sugerencia es en realidad un valor de evento que podemos pasar previamente. La explicación específica es la siguiente:

Esta función registra y devuelve un tipo de evento personalizado. Si la sugerencia proporcionada está disponible, se usará; de lo contrario, devolverá un valor no registrado entre QEvent::User y QEvent::MaxUser. Si su valor no está entre QEvent::User y QEvent::MaxUser, la sugerencia se ignora.

Devuelve -1 si se han obtenido todos los valores disponibles o si el programa se está cerrando.

  • Nota: Esta función es segura para subprocesos.

Supongo que te gusta

Origin blog.csdn.net/qq_43680827/article/details/131170107
Recomendado
Clasificación