QTouchEvent Class
La clase QTouchEvent contiene parámetros que describen un evento táctil. Más...
| Cabecera: | #include <QTouchEvent> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui)target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake: | QT += gui |
| Hereda: | QPointerEvent |
- Lista de todos los miembros, incluidos los heredados
- Miembros obsoletos
- QTouchEvent es parte de Clases de Eventos.
Funciones Públicas
| QTouchEvent(QEvent::Type eventType, const QPointingDevice *device = nullptr, Qt::KeyboardModifiers modifiers = Qt::NoModifier, const QList<QEventPoint> &touchPoints = {}) | |
| QObject * | target() const |
| QEventPoint::States | touchPointStates() const |
Funciones Públicas Reimplementadas
| virtual bool | isBeginEvent() const override |
| virtual bool | isEndEvent() const override |
| virtual bool | isUpdateEvent() const override |
Descripción Detallada
Activación de Eventos Táctiles
Los eventos táctiles se producen al pulsar, soltar o mover uno o más puntos táctiles en un dispositivo táctil (como una pantalla táctil o un track-pad). Para recibir eventos táctiles, los widgets deben tener definido el atributo Qt::WA_AcceptTouchEvents y los elementos gráficos deben tener definido el atributo acceptTouchEvents a true.
Cuando utilices widgets basados en QAbstractScrollArea, debes activar el atributo Qt::WA_AcceptTouchEvents en el área de desplazamiento viewport.
De forma similar a QMouseEvent, Qt captura automáticamente cada punto táctil en la primera pulsación dentro de un widget, y el widget recibirá todas las actualizaciones para el punto táctil hasta que se suelte. Ten en cuenta que es posible que un widget reciba eventos para numerosos puntos táctiles, y que múltiples widgets pueden estar recibiendo eventos táctiles al mismo tiempo.
Gestión de eventos
Todos los eventos táctiles son del tipo QEvent::TouchBegin, QEvent::TouchUpdate, QEvent::TouchEnd o QEvent::TouchCancel. Reimplementa QWidget::event() o QAbstractScrollArea::viewportEvent() para widgets y QGraphicsItem::sceneEvent() para elementos en una vista gráfica para recibir eventos táctiles.
A diferencia de los widgets, QWindows recibe eventos táctiles siempre, no hay necesidad de optar. Cuando se trabaja directamente con un QWindow, basta con reimplementar QWindow::touchEvent().
Los eventos QEvent::TouchUpdate y QEvent::TouchEnd se envían al widget o elemento que aceptó el evento QEvent::TouchBegin. Si el evento QEvent::TouchBegin no es aceptado y no es filtrado por un filtro de eventos, entonces no se envían más eventos táctiles hasta el siguiente QEvent::TouchBegin.
Algunos sistemas pueden enviar un evento del tipo QEvent::TouchCancel. Al recibir este evento, se solicita a las aplicaciones que ignoren toda la secuencia táctil activa. Por ejemplo, en un sistema compuesto, el compositor puede decidir tratar ciertos gestos como gestos de todo el sistema. Cada vez que se tome una decisión de este tipo (se reconozca el gesto), se notificará a los clientes con un evento QEvent::TouchCancel para que puedan actualizar su estado en consecuencia.
Las funciones pointCount() y point() pueden utilizarse para acceder e iterar puntos táctiles individuales.
La función points() devuelve una lista de todos los puntos táctiles contenidos en el evento. Tenga en cuenta que esta lista puede estar vacía, por ejemplo en el caso de un evento QEvent::TouchCancel. Cada punto es una instancia de la clase QEventPoint. El enum QEventPoint::State describe los diferentes estados que puede tener un punto táctil.
Nota: La lista de points() nunca será parcial: Un evento táctil siempre contendrá un punto táctil por cada contacto físico existente que tenga como objetivo la ventana o widget al que se envía el evento. Por ejemplo, asumiendo que todos los toques se dirigen a la misma ventana o widget, un evento con una condición de points().count()==2 está garantizado para implicar que el número de dedos que tocan la pantalla táctil o el touchpad es exactamente dos.
Envío y propagación de eventos
Por defecto, QGuiApplication traduce el primer punto táctil de un QTouchEvent en un QMouseEvent. Esto hace posible habilitar eventos táctiles en widgets existentes que normalmente no manejan QTouchEvent. Ver más abajo información sobre algunas consideraciones especiales necesarias al hacer esto.
QEvent::TouchBegin es el primer evento táctil enviado a un widget. El evento QEvent::TouchBegin contiene una bandera especial de aceptación que indica si el receptor quiere el evento. Por defecto, el evento es aceptado. Deberías llamar a ignore() si el evento de toque no es manejado por tu widget. El evento QEvent::TouchBegin se propaga por la cadena de widgets padre hasta que un widget lo acepta con accept(), o un filtro de eventos lo consume. Para QGraphicsItems, el evento QEvent::TouchBegin se propaga a los elementos bajo el ratón (similar a la propagación de eventos de ratón para QGraphicsItems).
Agrupación de puntos táctiles
Como se mencionó anteriormente, es posible que varios widgets reciban QTouchEvents al mismo tiempo. Sin embargo, Qt se asegura de no enviar nunca eventos QEvent::TouchBegin duplicados al mismo widget, lo que teóricamente podría ocurrir durante la propagación si, por ejemplo, el usuario tocara 2 widgets distintos en un QGroupBox y ambos widgets ignoraran el evento QEvent::TouchBegin.
Para evitar esto, Qt agrupará los nuevos puntos de toque utilizando las siguientes reglas:
- Cuando se detecta el primer punto táctil, el widget de destino se determina en primer lugar por la ubicación en pantalla y en segundo lugar por las reglas de propagación.
- Cuando se detectan puntos táctiles adicionales, Qt busca primero si hay algún punto táctil activo en algún ancestro o descendiente del widget bajo el nuevo punto táctil. Si los hay, el nuevo punto táctil se agrupa con el primero, y el nuevo punto táctil se enviará en un único QTouchEvent al widget que gestionó el primer punto táctil. (El widget bajo el nuevo punto táctil no recibirá un evento).
Esto hace posible que widgets hermanos manejen eventos táctiles independientemente mientras se asegura que la secuencia de QTouchEvents es siempre correcta.
Eventos de ratón y sintetización de eventos táctiles
La entrega de QTouchEvent es independiente de la de QMouseEvent. Los flags de aplicación Qt::AA_SynthesizeTouchForUnhandledMouseEvents y Qt::AA_SynthesizeMouseForUnhandledTouchEvents pueden usarse para habilitar o deshabilitar la sintetización automática de eventos táctiles a eventos de ratón y de eventos de ratón a eventos táctiles.
Advertencias
- Como se mencionó anteriormente, habilitar los eventos táctiles significa que múltiples widgets pueden estar recibiendo eventos táctiles simultáneamente. Combinado con el manejo por defecto de QWidget::event() para QTouchEvents, esto te da una gran flexibilidad en el diseño de interfaces de usuario táctiles. Ten en cuenta las implicaciones. Por ejemplo, es posible que el usuario esté moviendo un QSlider con un dedo y pulsando un QPushButton con otro. Las señales emitidas por estos widgets se intercalarán.
- No se admite la recursión en el bucle de eventos utilizando uno de los métodos exec() (por ejemplo, QDialog::exec() o QMenu::exec()) en un manejador de eventos QTouchEvent. Dado que hay múltiples receptores de eventos, la recursividad puede causar problemas, incluyendo pero no limitado a eventos perdidos y recursividad infinita inesperada.
- Los QTouchEvents no se ven afectados por un mouse grab o un active pop-up widget. El comportamiento de los QTouchEvents es indefinido cuando se abre una ventana emergente o se agarra el ratón mientras hay más de un punto táctil activo.
Véase también QEventPoint, QEventPoint::State, Qt::WA_AcceptTouchEvents, y QGraphicsItem::acceptTouchEvents().
Documentación de funciones miembro
[explicit] QTouchEvent::QTouchEvent(QEvent::Type eventType, const QPointingDevice *device = nullptr, Qt::KeyboardModifiers modifiers = Qt::NoModifier, const QList<QEventPoint> &touchPoints = {})
Construye un QTouchEvent con los datos eventType, device, touchPoints, y el teclado actual modifiers en el momento del evento.
[override virtual] bool QTouchEvent::isBeginEvent() const
Devuelve true si este evento incluye al menos un nuevo punto de contacto pulsado.
[override virtual] bool QTouchEvent::isEndEvent() const
Devuelve true si este evento incluye al menos un nuevo punto de contacto.
[override virtual] bool QTouchEvent::isUpdateEvent() const
Devuelve true si este evento no incluye puntos de contacto recién pulsados o recién liberados.
QObject *QTouchEvent::target() const
Devuelve el objeto de destino dentro de la ventana en la que se produjo el evento. Suele ser QWidget o QQuickItem. Puede ser 0 si no hay ningún objetivo específico disponible.
QEventPoint::States QTouchEvent::touchPointStates() const
Devuelve un bitwise OR de todos los estados de los puntos de contacto para este evento.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.