QT (D): Eventos y filtros de sucesos

Dirección original: https://houkaifa.com/2019/02/22/LearningNotes-QT-04/

contorno

Esta introducción eventos QT y filtros de eventos, y crea un sencillo applet de parodia clásica.
Medio Ambiente: Win10 + QT + Creator4.4.1 QT5.9.2.
contenido de ejecución: un punto menos que el botón sea visible.

Aquí Insertar imagen Descripción


A, QT eventos y filtros de eventos

Evento es una cosa buena, con el evento, podemos hacer ciertas cosas en ciertas situaciones, sin preocuparse de cuando esto sucede.

En QT (a): señales y ranuras entre escribió este pasaje:

señales y ranuras QtGui están en representación desarrollo del evento, es decir, la señal es el evento de disparo, la ranura es un controlador de eventos que se activa por la señal.

Con el fin de facilitar la rápida acumulación de familiaridad y hacer analogías, deja que aparece ahora, de hecho, no es un gran problema.

Señal / ranura y Qt apenas se expresó en forma de un evento, se puede decir que sea a lo sumo un ejemplo específico del evento, en el que el sistema especial de señal / ranura es activamente programa controlable puede ser iniciado por un evento. Además de eso, hay ratón, teclado y muchos otros dispositivos de mensajería, será gatillo relativamente pasivo una variedad de eventos, tales como.

Por ejemplo, se presiona el botón izquierdo del ratón, el botón izquierdo del ratón es liberado, el teclado y el botón del ratón, se mueve por el estilo, tendrán un evento correspondiente. Entonces, ¿cómo estos eventos se distribuyen entre el intervalo QT? ¿Cómo se debe detectar eventos específicos?

evento para

Los eventos complicados continua de entrada en nuestro programa, sin excepción, se toman el mismo camino:

Aquí Insertar imagen Descripción

En primer evento en el filtro de sucesos de ellos, y luego suelte el evento publicado en el despachador de eventos a través evento de distribución final se distribuirá al controlador de eventos correspondiente a poner en práctica las cosas relevantes.

Los detectores de eventos

Si desea escuchar un objeto de una serie de eventos, puede empezar desde el filtro de eventos también puede empezar desde el distribuidor de eventos.

La diferencia es que si a partir del filtro de eventos, eventos está escuchando todos los eventos serán filtrados objeto recibido instalado, y empezar desde el distribuidor de eventos, entonces no será capaz de obtener todos los eventos, debido a que algunos eventos pueden en caso y es interceptado por el filtro para liberar los rechazados. La siguiente charla sobre un filtro de eventos.

Para evento de filtro en un objeto, primero debe instalar un filtro de eventos en él:

void QObject::installEventFilter(QObject *filterObj)

Que se describe en el manual oficial de la siguiente manera:

Se instala un filtro de eventos filterObj en este objeto. Por ejemplo:

monitoredObj->installEventFilter(filterObj)

Un filtro de eventos es un objeto que recibe todos los eventos que se envían a este objeto. El filtro puede detener ya sea el evento o reenviarlo a este objeto. El filtro de eventos filterObj recibe eventos a través de su función EventFilter (). La función EventFilter () debe devolver verdadero si el evento debe ser filtrada, (es decir, parado); de lo contrario, debe devolver false.
Si hay varios filtros de eventos se instalan en un solo objeto, el filtro que se instaló el pasado se activa por primera vez.

Como puede verse, en el caso de que el filtro, no sólo podemos obtener todos los eventos recibidos evento, el evento no puede ser especificada devuelve cierto dado a conocer por la función de filtro, y además de tal manera que el controlador correspondiente indirectamente fracaso.

función EventFilter () y evento () se define en la función de clase QObject virtual, para filtrar y distribuir el evento. Después de filtro de sucesos de la instalación, sólo tenemos una clase correspondiente que se deriva de clase QObject y volver a escribir, la función EventFilter () se declara como sigue:

bool QObject::eventFilter(QObject *watched, QEvent *event)

Que se describe en el manual oficial de la siguiente manera:

Filtros de eventos si este objeto se ha instalado como un filtro de eventos para el objeto observado.
En su reimplementación de esta función, si desea filtrar el evento fuera, es decir, impedir que se maneja más, return true; en caso contrario devuelve falso.

Se puede ver, el parámetro se observó filtro de eventos del objeto está montada , es parámetros de evento del evento objeto recibido .

Cuando el tipo de evento es parámetro Qt QEvent entre todos los tipos de eventos de la clase base, que incluye no sólo el tipo de evento, también llevar a los parámetros relevantes del evento, por lo que el evento que se necesitará cuando los eventos de filtrado desecharse.

Cuando el bucle principal evento de Qt (QCoreApplication :: exec ()) para extraer los eventos del sistema ventana nativas de la cola de eventos, que se convertirá en qEvents, y transmite los eventos convertidos a QObjects, y además alimenta al objeto entre los filtros instalados.

Aquí Insertar imagen Descripción

En segundo lugar, el pequeño ejemplo: Simple pequeña parodia de programa

Objetivo efecto: en la etiqueta de visualización de la pantalla: ¿Amas a aprenderlo? Y no se permite dos botones de "amor" y "no hacer el amor", que "no hacer el amor" se refiere al botón del ratón.

Construir proyecto Qt Gui y completar una interfaz sencilla para construir:

Aquí Insertar imagen Descripción

"No es amor" botón de filtro (pushButton_2) evento instalado en el constructor de la clase principal de la interfaz:

Aquí Insertar imagen Descripción

En el archivo de clase principal interfaz de cabecera declarar una función de filtro de eventos:

Aquí Insertar imagen Descripción

Implementar una función de filtro de eventos

Aquí Insertar imagen Descripción

¿Qué QEvent :: Introduzca Qt entre los representantes del ratón entrar evento, por ejemplo, un botón aquí, el momento en que se mueve el botón del ratón, el evento se activa.
QEvent :: Introduzca tipo de datos Tipo, en nombre del tipo de evento se define en la clase de enumeración QEvent, que QEvent :: Introducir define en esta enumeración:
Aquí Insertar imagen Descripción
otro tipo de evento puede ser en el manual oficial de la clase QEvent fácil de encontrar.

F5 efecto de depuración:

Aquí Insertar imagen Descripción

Publicado 26 artículos originales · ganado elogios 24 · Vistas a 30000 +

Supongo que te gusta

Origin blog.csdn.net/iSunwish/article/details/87886549
Recomendado
Clasificación