Sur cette page

QTouchEvent Class

La classe QTouchEvent contient des paramètres qui décrivent un événement tactile. En savoir plus...

En-tête : #include <QTouchEvent>
CMake : find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake : QT += gui
Hérite de : QPointerEvent

Fonctions publiques

QTouchEvent(QEvent::Type eventType, const QPointingDevice *device = nullptr, Qt::KeyboardModifiers modifiers = Qt::NoModifier, const QList<QEventPoint> &touchPoints = {})
QObject *target() const
QEventPoint::States touchPointStates() const

Fonctions publiques réimplémentées

virtual bool isBeginEvent() const override
virtual bool isEndEvent() const override
virtual bool isUpdateEvent() const override

Fonctions protégées

QTouchEvent(QTouchEvent &&)
QTouchEvent &operator=(QTouchEvent &&)
QTouchEvent &operator=(const QTouchEvent &other)

Description détaillée

Activation des événements tactiles

Les événements tactiles se produisent lorsque l'on appuie, relâche ou déplace un ou plusieurs points de contact sur un périphérique tactile (tel qu'un écran tactile ou un pavé tactile). Pour recevoir des événements tactiles, les widgets doivent avoir l'attribut ` Qt::WA_AcceptTouchEvents ` défini et les éléments graphiques doivent avoir l'attribut ` acceptTouchEvents ` défini sur `true`.

Lorsque vous utilisez des widgets basés sur l’attribut ` QAbstractScrollArea `, vous devez activer l’attribut ` Qt::WA_AcceptTouchEvents ` sur la propriété ` viewport` de la zone de défilement.

Tout comme avec ` QMouseEvent`, Qt détecte automatiquement chaque point de contact dès la première pression à l’intérieur d’un widget, et ce dernier recevra toutes les mises à jour relatives à ce point de contact jusqu’à ce que la pression soit relâchée. Notez qu’un widget peut recevoir des événements pour plusieurs points de contact, et que plusieurs widgets peuvent recevoir des événements tactiles simultanément.

Gestion des événements

Tous les événements tactiles sont de type ` QEvent::TouchBegin`, ` QEvent::TouchUpdate`, ` QEvent::TouchEnd ` ou ` QEvent::TouchCancel`. Réimplémentez ` QWidget::event()` ou ` QAbstractScrollArea::viewportEvent()` pour les widgets, et ` QGraphicsItem::sceneEvent()` pour les éléments d’une vue graphique afin de recevoir les événements tactiles.

Contrairement aux widgets, les QWindows reçoivent toujours les événements tactiles ; il n’est pas nécessaire de s’y abonner. Lorsque vous travaillez directement avec une QWindow, il suffit de réimplémenter la méthode QWindow::touchEvent().

Les événements ` QEvent::TouchUpdate ` et ` QEvent::TouchEnd ` sont envoyés au widget ou à l’élément qui a accepté l’événement ` QEvent::TouchBegin `. Si l’événement ` QEvent::TouchBegin ` n’est pas accepté et n’est pas filtré par un filtre d’événements, aucun autre événement tactile n’est envoyé jusqu’au prochain ` QEvent::TouchBegin`.

Certains systèmes peuvent envoyer un événement de type « QEvent::TouchCancel ». À la réception de cet événement, les applications sont invitées à ignorer l’intégralité de la séquence tactile active. Par exemple, dans un système composite, le compositeur peut décider de traiter certains gestes comme des gestes à l’échelle du système. Chaque fois qu’une telle décision est prise (que le geste est reconnu), les clients sont notifiés par un événement « QEvent::TouchCancel » afin qu’ils puissent mettre à jour leur état en conséquence.

Les fonctions ` pointCount()` et ` point()` peuvent être utilisées pour accéder aux points de contact individuels et les parcourir.

La fonction points() renvoie une liste de tous les points de contact contenus dans l'événement. Notez que cette liste peut être vide, par exemple dans le cas d'un événement QEvent::TouchCancel. Chaque point est une instance de la classe QEventPoint. L'énumération QEventPoint::State décrit les différents états qu'un point de contact peut présenter.

Remarque : la liste de ` points()` ne sera jamais partielle : un événement tactile contiendra toujours un point de contact pour chaque contact physique existant ciblant la fenêtre ou le widget auquel l'événement est envoyé. Par exemple, en supposant que tous les contacts visent la même fenêtre ou le même widget, un événement dont la condition est points().count()==2 implique nécessairement que le nombre de doigts touchant l’écran tactile ou le pavé tactile est exactement de deux.

Transmission et propagation des événements

Par défaut, ` QGuiApplication ` convertit le premier point de contact d’un `QTouchEvent` en un ` QMouseEvent`. Cela permet d’activer les événements tactiles sur des widgets existants qui ne gèrent normalement pas les `QTouchEvent`. Voir ci-dessous pour plus d’informations sur certaines considérations particulières à prendre en compte lors de cette opération.

QEvent::TouchBegin est le premier événement tactile envoyé à un widget. L’événement ` QEvent::TouchBegin ` contient un indicateur d’acceptation spécial qui indique si le récepteur souhaite recevoir l’événement. Par défaut, l’événement est accepté. Vous devez appeler ` ignore()` si l’événement tactile n’est pas géré par votre widget. L’événement « QEvent::TouchBegin » est propagé vers le haut de la chaîne des widgets parents jusqu’à ce qu’un widget l’accepte avec ` accept()` ou qu’un filtre d’événements le consomme. Pour les `QGraphicsItems`, l’événement « QEvent::TouchBegin » est propagé aux éléments situés sous la souris (de manière similaire à la propagation des événements de souris pour les `QGraphicsItems`).

Regroupement des points de contact

Comme mentionné ci-dessus, il est possible que plusieurs widgets reçoivent simultanément des événements `QTouchEvent`. Cependant, Qt veille à ne jamais envoyer d’événements ` QEvent::TouchBegin ` en double au même widget, ce qui pourrait théoriquement se produire lors de la propagation si, par exemple, l’utilisateur touchait deux widgets distincts dans une ` QGroupBox ` et que ces deux widgets ignoraient l’événement ` QEvent::TouchBegin `.

Pour éviter cela, Qt regroupe les nouveaux points de contact selon les règles suivantes :

  • Lorsqu’un premier point de contact est détecté, le widget de destination est déterminé d’abord par sa position à l’écran, puis par les règles de propagation.
  • Lorsque des points de contact supplémentaires sont détectés, Qt vérifie d’abord s’il existe des points de contact actifs sur un ancêtre ou un descendant du widget situé sous le nouveau point de contact. Si c’est le cas, le nouveau point de contact est regroupé avec le premier, et le nouveau point de contact sera envoyé dans un seul QTouchEvent au widget qui a géré le premier point de contact. (Le widget situé sous le nouveau point de contact ne recevra pas d’événement).

Cela permet aux widgets frères de gérer les événements tactiles de manière indépendante tout en garantissant que la séquence des QTouchEvents est toujours correcte.

Événements de souris et synthèse des événements tactiles

La transmission des événements QTouchEvent est indépendante de celle des événements de souris ( QMouseEvent). Les indicateurs d’application « Qt::AA_SynthesizeTouchForUnhandledMouseEvents » et « Qt::AA_SynthesizeMouseForUnhandledTouchEvents » peuvent être utilisés pour activer ou désactiver la synthèse automatique des événements tactiles en événements de souris et des événements de souris en événements tactiles.

Mises en garde

  • Comme mentionné ci-dessus, l’activation des événements tactiles signifie que plusieurs widgets peuvent recevoir des événements tactiles simultanément. Combiné à la gestion par défaut de ` QWidget::event()` pour les `QTouchEvent`, cela vous offre une grande flexibilité dans la conception d’interfaces utilisateur tactiles. Soyez conscient des implications. Par exemple, il est possible que l’utilisateur déplace un ` QSlider ` avec un doigt et appuie sur un ` QPushButton ` avec un autre. Les signaux émis par ces widgets seront entremêlés.
  • La récursivité dans la boucle d’événements à l’aide de l’une des méthodes exec() (par exemple, QDialog::exec() ou QMenu::exec()) dans un gestionnaire d’événements QTouchEvent n’est pas prise en charge. Étant donné qu’il existe plusieurs destinataires d’événements, la récursivité peut entraîner des problèmes, notamment, mais sans s’y limiter, la perte d’événements et une récursivité infinie inattendue.
  • Les QTouchEvents ne sont pas affectés par un mouse grab ou un active pop-up widget. Le comportement des QTouchEvents est indéfini lors de l’ouverture d’une fenêtre contextuelle ou de la saisie de la souris alors qu’il y a plusieurs points de contact actifs.

Voir également QEventPoint, QEventPoint::State, Qt::WA_AcceptTouchEvents et QGraphicsItem::acceptTouchEvents().

Documentation des fonctions membres

[explicit] QTouchEvent::QTouchEvent(QEvent::Type eventType, const QPointingDevice *device = nullptr, Qt::KeyboardModifiers modifiers = Qt::NoModifier, const QList<QEventPoint> &touchPoints = {})

Crée un objet `QTouchEvent` avec les paramètres suivants : ` eventType`, ` device`, ` touchPoints` et la configuration actuelle du clavier ` modifiers ` au moment de l'événement.

[protected delete] QTouchEvent::QTouchEvent(QTouchEvent &&)

Crée par « move » une instance de ` QTouchEvent`. Cette fonction est supprimée.

[override virtual] bool QTouchEvent::isBeginEvent() const

Renvoie « true » si cet événement comprend au moins un point de contact nouvellement activé.

[override virtual] bool QTouchEvent::isEndEvent() const

Renvoie « true » si cet événement comprend au moins un point de contact récemment publié.

[override virtual] bool QTouchEvent::isUpdateEvent() const

Renvoie « true » si cet événement ne contient pas de points de contact récemment activés ou récemment relâchés.

QObject *QTouchEvent::target() const

Renvoie l'objet cible au sein de la fenêtre dans laquelle l'événement s'est produit. Il s'agit généralement d'un ` QWidget ` ou d'un ` QQuickItem`. La valeur peut être égale à 0 lorsqu'aucune cible spécifique n'est disponible.

QEventPoint::States QTouchEvent::touchPointStates() const

Renvoie le résultat d'un OU binaire de tous les états des points de contact pour cet événement.

[protected delete] QTouchEvent &QTouchEvent::operator=(QTouchEvent &&)

La commande « Move » affecte l'other à cette instance QTouchEvent. Cette fonction est supprimée.

[noexcept protected default] QTouchEvent &QTouchEvent::operator=(const QTouchEvent &other)

Attribue par copie l'other à cette instance d'QTouchEvent.

© 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.