QTouchEvent Class
Die Klasse „QTouchEvent“ enthält Parameter, die ein Berührungsereignis beschreiben. Mehr...
| Header: | #include <QTouchEvent> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake: | QT += gui |
| Erbt von: | QPointerEvent |
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- Veraltete Mitglieder
- QTouchEvent ist Teil der Ereignisklassen.
Öffentliche Funktionen
| QTouchEvent(QEvent::Type eventType, const QPointingDevice *device = nullptr, Qt::KeyboardModifiers modifiers = Qt::NoModifier, const QList<QEventPoint> &touchPoints = {}) | |
| QObject * | target() const |
| QEventPoint::States | touchPointStates() const |
Neu implementierte öffentliche Funktionen
| virtual bool | isBeginEvent() const override |
| virtual bool | isEndEvent() const override |
| virtual bool | isUpdateEvent() const override |
Geschützte Funktionen
| QTouchEvent(QTouchEvent &&) | |
| QTouchEvent & | operator=(QTouchEvent &&) |
| QTouchEvent & | operator=(const QTouchEvent &other) |
Ausführliche Beschreibung
Aktivieren von Touch-Ereignissen
Touch-Ereignisse treten auf, wenn ein oder mehrere Berührungspunkte auf einem Touch-Gerät (z. B. einem Touchscreen oder Trackpad) gedrückt, losgelassen oder verschoben werden. Um Touch-Ereignisse zu empfangen, muss bei Widgets das Attribut „ Qt::WA_AcceptTouchEvents “ gesetzt sein, und bei Grafikelementen muss das Attribut „ acceptTouchEvents “ auf „true“ gesetzt sein.
Bei der Verwendung von Widgets, die auf „ QAbstractScrollArea “ basieren, sollten Sie das Attribut „ Qt::WA_AcceptTouchEvents “ für den Scrollbereich unter „ viewport “ aktivieren.
Ähnlich wie bei „ QMouseEvent “ erfasst Qt automatisch jeden Berührungspunkt beim ersten Antippen innerhalb eines Widgets, und das Widget erhält alle Aktualisierungen für diesen Berührungspunkt, bis der Finger losgelassen wird. Beachten Sie, dass ein Widget Ereignisse für zahlreiche Berührungspunkte empfangen kann und dass mehrere Widgets gleichzeitig Berührungsereignisse empfangen können.
Ereignisbehandlung
Alle Berührungsereignisse sind vom Typ „ QEvent::TouchBegin “, „ QEvent::TouchUpdate “, „ QEvent::TouchEnd “ oder „ QEvent::TouchCancel “. Implementieren Sie „ QWidget::event()“ oder „ QAbstractScrollArea::viewportEvent()“ für Widgets und „ QGraphicsItem::sceneEvent()“ für Elemente in einer Grafikansicht neu, um Berührungsereignisse zu empfangen.
Im Gegensatz zu Widgets empfangen QWindows Touch-Ereignisse immer, eine separate Aktivierung ist nicht erforderlich. Bei der direkten Arbeit mit einem „ QWindow “ reicht es aus, „ QWindow::touchEvent()“ neu zu implementieren.
Die Ereignisse „ QEvent::TouchUpdate “ und „ QEvent::TouchEnd “ werden an das Widget oder Element gesendet, das das Ereignis „ QEvent::TouchBegin “ akzeptiert hat. Wird das Ereignis „ QEvent::TouchBegin “ nicht akzeptiert und auch nicht durch einen Ereignisfilter gefiltert, werden bis zum nächsten „ QEvent::TouchBegin “ keine weiteren Berührungsereignisse gesendet.
Manche Systeme senden möglicherweise ein Ereignis vom Typ „ QEvent::TouchCancel “. Beim Empfang dieses Ereignisses werden Anwendungen aufgefordert, die gesamte aktive Berührungssequenz zu ignorieren. In einem Compositing-System kann der Compositor beispielsweise beschließen, bestimmte Gesten als systemweite Gesten zu behandeln. Wann immer eine solche Entscheidung getroffen wird (die Geste wird erkannt), werden die Clients mit einem „ QEvent::TouchCancel “-Ereignis benachrichtigt, damit sie ihren Status entsprechend aktualisieren können.
Die Funktionen ` pointCount()` und ` point()` können verwendet werden, um auf einzelne Berührungspunkte zuzugreifen und diese zu durchlaufen.
Die Funktion „ points()“ gibt eine Liste aller im Ereignis enthaltenen Berührungspunkte zurück. Beachten Sie, dass diese Liste leer sein kann, beispielsweise im Fall eines „ QEvent::TouchCancel “-Ereignisses. Jeder Punkt ist eine Instanz der Klasse „ QEventPoint “. Die Enumeration „ QEventPoint::State “ beschreibt die verschiedenen Zustände, die ein Berührungspunkt annehmen kann.
Hinweis: Die Liste von ` points()` ist niemals unvollständig: Ein Berührungsereignis enthält immer einen Berührungspunkt für jeden vorhandenen physischen Berührungskontakt, der auf das Fenster oder Widget gerichtet ist, an das das Ereignis gesendet wird. Angenommen, alle Berührungen zielen auf dasselbe Fenster oder Widget ab, dann bedeutet ein Ereignis mit der Bedingung ` points().count() == 2` garantiert, dass genau zwei Finger den Touchscreen oder das Touchpad berühren.
Ereignisübermittlung und -weitergabe
Standardmäßig wandelt ` QGuiApplication ` den ersten Berührungspunkt in einem `QTouchEvent` in ein ` QMouseEvent` um. Dadurch ist es möglich, Touch-Ereignisse für vorhandene Widgets zu aktivieren, die normalerweise keine `QTouchEvent`-Ereignisse verarbeiten. Nachstehend finden Sie Informationen zu einigen besonderen Aspekten, die dabei zu beachten sind.
QEvent::TouchBegin ist das erste Touch-Ereignis, das an ein Widget gesendet wird. Das ` QEvent::TouchBegin `-Ereignis enthält ein spezielles Akzeptanzflag, das angibt, ob der Empfänger das Ereignis annehmen möchte. Standardmäßig wird das Ereignis angenommen. Sie sollten ` ignore()` aufrufen, wenn das Touch-Ereignis von Ihrem Widget nicht verarbeitet wird. Das Ereignis „ QEvent::TouchBegin “ wird entlang der übergeordneten Widget-Kette weitergegeben, bis ein Widget es mit „ accept()“ akzeptiert oder ein Ereignisfilter es verarbeitet. Bei „QGraphicsItems“ wird das Ereignis „ QEvent::TouchBegin “ an die unter der Maus liegenden Elemente weitergegeben (ähnlich wie bei der Weitergabe von Mausereignissen für „QGraphicsItems“).
Gruppierung von Berührungspunkten
Wie oben erwähnt, ist es möglich, dass mehrere Widgets gleichzeitig „QTouchEvents“ empfangen. Qt stellt jedoch sicher, dass niemals doppelte „ QEvent::TouchBegin “-Ereignisse an dasselbe Widget gesendet werden. Dies könnte theoretisch während der Weiterleitung passieren, wenn der Benutzer beispielsweise zwei separate Widgets in einem „ QGroupBox “ berührt und beide Widgets das „ QEvent::TouchBegin “-Ereignis ignorieren.
Um dies zu vermeiden, gruppiert Qt neue Berührungspunkte nach den folgenden Regeln:
- Wenn der erste Berührungspunkt erkannt wird, wird das Ziel-Widget zunächst anhand der Position auf dem Bildschirm und anschließend anhand der Weiterleitungsregeln bestimmt.
- Werden weitere Berührungspunkte erkannt, prüft Qt zunächst, ob auf einem Vorfahren oder Nachkommen des Widgets unter dem neuen Berührungspunkt aktive Berührungspunkte vorhanden sind. Ist dies der Fall, wird der neue Berührungspunkt mit dem ersten gruppiert, und der neue Berührungspunkt wird in einem einzigen `QTouchEvent` an das Widget gesendet, das den ersten Berührungspunkt verarbeitet hat. (Das Widget unter dem neuen Berührungspunkt erhält kein Ereignis.)
Dadurch können gleichrangige Widgets Touch-Ereignisse unabhängig voneinander verarbeiten, während gleichzeitig sichergestellt wird, dass die Reihenfolge der QTouchEvents stets korrekt ist.
Mausereignisse und die Synthese von Touch-Ereignissen
Die Übermittlung von `QTouchEvent` ist unabhängig von der von ` QMouseEvent`. Die Anwendungsflags ` Qt::AA_SynthesizeTouchForUnhandledMouseEvents ` und ` Qt::AA_SynthesizeMouseForUnhandledTouchEvents ` können verwendet werden, um die automatische Synthese von Touch-Ereignissen zu Mausereignissen und von Mausereignissen zu Touch-Ereignissen zu aktivieren oder zu deaktivieren.
Hinweise
- Wie oben erwähnt, bedeutet die Aktivierung von Touch-Ereignissen, dass mehrere Widgets gleichzeitig Touch-Ereignisse empfangen können. In Kombination mit der standardmäßigen Verarbeitung von ` QWidget::event()` für `QTouchEvents` bietet dies Ihnen große Flexibilität bei der Gestaltung von Touch-Benutzeroberflächen. Seien Sie sich der Auswirkungen bewusst. Es ist beispielsweise möglich, dass der Benutzer ein ` QSlider ` mit einem Finger bewegt und gleichzeitig mit einem anderen Finger auf ein ` QPushButton ` drückt. Die von diesen Widgets ausgesendeten Signale werden dabei miteinander vermischt.
- Eine Rekursion in die Ereignisschleife mithilfe einer der `exec()`-Methoden (z. B. ` QDialog::exec()` oder ` QMenu::exec()`) in einem `QTouchEvent`-Ereignisbehandler wird nicht unterstützt. Da es mehrere Ereignisempfänger gibt, kann Rekursion zu Problemen führen, darunter unter anderem verlorene Ereignisse und unerwartete unendliche Rekursion.
- QTouchEvents sind von einem mouse grab oder einem active pop-up widget nicht betroffen. Das Verhalten von QTouchEvents ist undefiniert, wenn ein Popup geöffnet oder die Maus ergriffen wird, während mehr als ein Touch-Punkt aktiv ist.
Siehe auch „ QEventPoint“ , „ QEventPoint::State “, „ Qt::WA_AcceptTouchEvents “ und „ QGraphicsItem::acceptTouchEvents()“.
Dokumentation der Member-Funktionen
[explicit] QTouchEvent::QTouchEvent(QEvent::Type eventType, const QPointingDevice *device = nullptr, Qt::KeyboardModifiers modifiers = Qt::NoModifier, const QList<QEventPoint> &touchPoints = {})
Erstellt ein `QTouchEvent` mit den angegebenen Werten für ` eventType`, ` device`, ` touchPoints` sowie der zum Zeitpunkt des Ereignisses aktuellen Tastaturkonfiguration ` modifiers `.
[protected delete] QTouchEvent::QTouchEvent(QTouchEvent &&)
Erstellt eine Instanz von ` QTouchEvent`. Diese Funktion wurde gelöscht.
[override virtual] bool QTouchEvent::isBeginEvent() const
Gibt „true“ zurück, wenn dieses Ereignis mindestens einen neu gedrückten Berührungspunkt enthält.
[override virtual] bool QTouchEvent::isEndEvent() const
Gibt „true“ zurück, wenn dieses Ereignis mindestens einen neu veröffentlichten Touchpoint enthält.
[override virtual] bool QTouchEvent::isUpdateEvent() const
Gibt „true“ zurück, wenn dieses Ereignis keine neu gedrückten oder neu losgelassenen Berührungspunkte enthält.
QObject *QTouchEvent::target() const
Gibt das Zielobjekt innerhalb des Fensters zurück, in dem das Ereignis aufgetreten ist. Dabei handelt es sich in der Regel um ein „ QWidget “ oder ein „ QQuickItem “. Der Wert kann 0 sein, wenn kein spezifisches Ziel verfügbar ist.
QEventPoint::States QTouchEvent::touchPointStates() const
Gibt ein bitweises ODER aller Berührungspunktzustände für dieses Ereignis zurück.
[protected delete] QTouchEvent &QTouchEvent::operator=(QTouchEvent &&)
Weist „ other “ dieser „ QTouchEvent “-Instanz zu. Diese Funktion wird gelöscht.
[noexcept protected default] QTouchEvent &QTouchEvent::operator=(const QTouchEvent &other)
other Weist dieser Instanz von „ QTouchEvent “ den Wert „ “ zu. “ zu dieser Instanz von „ “ zu.
© 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.