IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Viadeo Twitter Facebook Share on Google+   
Logo Documentation Qt ·  Page d'accueil  ·  Toutes les classes  ·  Toutes les fonctions  ·  Vues d'ensemble  · 

QTouchEvent

La classe QTouchEvent contient des paramètres qui décrivent un évènement de toucher. Plus d'informations...

#include <QTouchEvent>

Voir la position dans l'arbre des classes.

  

Héritage

Hérite de QInputEvent.

Cette classe a été introduite dans Qt 4.6.

Description détaillée

La classe QTouchEvent contient des paramètres qui décrivent un évènement de toucher.

Activation des évènements de toucher

Les évènements de toucher se produisent lors d'une pression, d'un relâchement ou d'un mouvement d'un ou plusieurs points de toucher sur un appareil tactile (comme un écran tactile ou track-pad). Pour recevoir des évènements de toucher, les widgets doivent avoir l'attribut Qt::WA_AcceptTouchEvents à true et les éléments graphiques doivent avoir l'attribut acceptTouchEvents défini à true.

Lors de l'utilisation de widgets basés sur QAbstractScrollArea, vous devez activer l'attribut Qt::WA_AcceptTouchEvents sur le viewport de la zone de défilement.

Comme pour QMouseEvent, Qt capte automatiquement un point de toucher dès la première pression à l'intérieur d'un widget, et le widget recevra toutes les mises à jour du point de toucher jusqu'à ce que ce dernier soit relâché. Notez qu'il est possible pour un widget de recevoir des évènements pour de nombreux points de toucher. Notez aussi que de multiples widgets peuvent recevoir des évènements de toucher en même temps.

Gestion des évènements

Tous les évènements de toucher sont du type QEvent::TouchBegin, QEvent::TouchUpdate ou QEvent::TouchEnd. Réimplémentez QWidget::event() ou QAbstractScrollArea::viewportEvent() pour les widgets et QGraphicsItem::sceneEvent() pour les éléments présents dans une vue graphique pour la réception d'évènements de toucher.

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é ni filtré par un filtre d'évènements, alors aucun autre évènement de toucher ne sera envoyé jusqu'au prochain QEvent::TouchBegin.

La fonction touchPoints() retourne une liste de tous les points de toucher contenus dans le widget. Des informations à propos de chaque point de toucher peuvent être récupérées en utilisant la classe QTouchEvent::TouchPoint. L'énumération Qt::TouchPointState décrit les différents états qu'un point de toucher peut avoir.

Livraison et propagation d'évènements

Par défaut, QWidget::event() traduit le premier point de toucher non primaire dans un QTouchEvent à l'intérieur d'un QMouseEvent. Cela permet d'autoriser les évènements de toucher dans les widgets existants qui ne gèrent normalement pas QTouchEvent. Voir ci-dessous pour plus d'informations sur certaines considérations spéciales nécessaires lors d'une telle action.

QEvent::TouchBegin est le premier évènement de toucher envoyé à un widget. L'évènement QEvent::TouchBegin contient un drapeau spécial d'admission d'évènement qui indique si le receveur veut ou non de l'évènement. Par défaut, l'évènement est accepté. Vous devez appeler ignore() si l'évènement de toucher n'est pas géré par votre widget. L'évènement QEvent::TouchBegin est propagé dans la file des widgets parents jusqu'à ce qu'un widget l'accepte avec accept(), ou bien jusqu'à ce qu'un filtre d'évènements le considère. Pour les QGraphicsItem, l'évènement QEvent::TouchBegin est propagé aux éléments sous la souris (identique à la propagation des évènements de souris pour les QGraphicsItem).

Groupement de points de toucher

Comme mentionné plus haut, il est possible que plusieurs widgets reçoivent des QTouchEvent en même temps. Cependant, Qt assure ne jamais délivrer de doublons des évènements QEvent::TouchBegin au même widget. Ces doublons doivent théoriquement se produire durant la propagation si, par exemple, l'utilisateur a touché deux widgets séparés dans un QGroupBox et que les deux widgets ont ignoré l'évènement QEvent::TouchBegin.

Pour éviter cela, Qt va grouper les nouveaux points de toucher ensemble en utilisant les règles suivantes :

  • lorsque le premier point de toucher est détecté, le widget de destination est déterminé dans un premier temps par la localisation à l'écran, puis par les règles de propagation ;
  • lorsque d'additionnels points de toucher sont détectés, Qt commence par regarder s'il n'y a pas déjà des points de toucher actifs sur l'un des ancêtres ou des descendants du widget sous le nouveau point de toucher. S'il y en a, le nouveau point de toucher est groupé avec le premier, et est envoyé dans un même QTouchEvent au widget qui gère le premier point de toucher (le widget sous le nouveau point de toucher ne recevra pas d'évènement).

Cela rend possible que plusieurs widgets d'un même parent puissent gérer les évènements de toucher indépendamment, tout en assurant que la séquence de QTouchEvent soit toujours correcte.

Les évènements de souris et les points de toucher primaires

La livraison de QTouchEvent est indépendante de celle de QMouseEvent. Sur certains systèmes de fenêtrage, les évènements de souris sont aussi envoyés depuis le point de toucher primaire. Cela signifie qu'il est possible pour votre widget de recevoir à la fois des évènements de QTouchEvent et de QMouseEvent pour un même point d'interaction avec l'utilisateur. Vous pouvez utiliser la fonction QTouchEvent::TouchPoint::isPrimary() pour identifier le point de toucher primaire.

Notez que sous certains systèmes de fenêtrage, il est possible de recevoir des évènements de toucher sans point de toucher primaire. Tout cela signifie qu'il n'y aura pas d'évènement de souris généré pour les points de toucher dans le QTouchEvent.

Mises en garde

  • Comme mentionné ci-dessus, l'activation des évènements de toucher signifie que de multiples widgets pourront être les récepteurs d'évènements de toucher de manière simultanée. Combiné avec la gestion par défaut de QWidget::event() pour les QTouchEvent, cela vous donne une grande flexibilité dans la conception d'interfaces utilisateur tactiles. Soyez avertis de ce que cela implique. Par exemple, il est possible que l'utilisateur déplace un QSlider d'un doigt et appuie sur un QPushButton d'un autre en même temps. Les signaux émis par ces widgets sont dans ce cas de figure entrelacés.
  • La récursivité à l'intérieur de la boucle d'évènements utilisant l'une des méthodes exec() (par exemple, QDialog::exec() ou QMenu::exec()) dans un gestionnaire d'évènements QTouchEvent n'est pas supportée. Puisqu'il y a de multiples receveurs d'évènements, la récursivité peut poser des problèmes, incluant la perte d'évènements et les boucles infinies inattendues.
  • Les QTouchEvent ne sont pas affectés par une saisie de souris ou par un widget pop-up actif. Le comportement des QTouchEvent est indéfini lors de l'ouverture d'une pop-up ou lors de la saisie de la souris lorsqu'il y a plus d'un point de toucher actif.

Voir aussi QTouchEvent::TouchPoint, Qt::TouchPointState, Qt::WA_AcceptTouchEvents et QGraphicsItem::acceptTouchEvents().

Type

enum QTouchEvent::DeviceType

Cette énumération représente le type du matériel qui a généré un QTouchEvent.

Constante Valeur Description
QTouchEvent::TouchScreen   Pour ce type de matériel, la surface de toucher et d'affichage sont intégrés. Cela signifie que la surface et l'affichage ont typiquement la même taille, de telle manière qu'il y ait une relation directe entre les positions et les coordonnées physiques des points de toucher retournées par QTouchEvent::TouchPoint. Comme résultat, Qt permet à l'utilisateur d'interagir directement avec de multiples QWidget et QGraphicsItem en même temps.
QTouchEvent::TouchPad 1 Pour ce type de matériel, la surface de toucher est séparée de l'affichage. Il n'y a pas de relation directe entre la position de toucher physique et les coordonnées à l'écran. À la place, elles sont calculées relativement à la position de la souris actuelle, et l'utilisateur doit utiliser le touch-pad pour déplacer ce point de référence. À la différence des écrans tactiles, Qt permet aux utilisateurs d'interagir avec un unique QWidget ou QGraphicsItem à la fois.

Fonctions membres

QTouchEvent::QTouchEvent ( QEvent::Type eventType, QTouchEvent::DeviceType deviceType = TouchScreen, Qt::KeyboardModifiers modifiers = Qt::NoModifier, Qt::TouchPointStates touchPointStates = 0, const QList<QTouchEvent::TouchPoint> & touchPoints = QList<QTouchEvent::TouchPoint> () )

Construit un QTouchEvent avec les eventType, deviceType et touchPoints donnés. Les touchPointStates et modifiers sont les états du point de toucher actuel et les modificateurs de clavier au moment de l'évènement.

QTouchEvent::~QTouchEvent ()

Détruit le QTouchEvent.

QTouchEvent::DeviceType QTouchEvent::deviceType () const

Retourne le Type de matériel de toucher, qui est de type DeviceType.

Qt::TouchPointStates QTouchEvent::touchPointStates () const

Retourne une opération binaire OU de tous les états de points de toucher pour cet évènement.

const QList<QTouchEvent::TouchPoint> & QTouchEvent::touchPoints () const

Retourne la liste des points de toucher contenus dans l'évènement de toucher.

QWidget * QTouchEvent::widget () const

Retourne le widget sur lequel l'évènement s'est produit.

Remerciements

Merci à Louis du Verdier pour la traduction et à Jonathan Courtois ainsi qu'à Claude Leloup pour leur relecture !

Cette page est une traduction d'une page de la documentation de Qt, écrite par Nokia Corporation and/or its subsidiary(-ies). Les éventuels problèmes résultant d'une mauvaise traduction ne sont pas imputables à Nokia. Qt 4.7
Copyright © 2024 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon, vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.
Vous avez déniché une erreur ? Un bug ? Une redirection cassée ? Ou tout autre problème, quel qu'il soit ? Ou bien vous désirez participer à ce projet de traduction ? N'hésitez pas à nous contacter ou par MP !