Maus-Ereignisse
Eine modernere Art der Verarbeitung von Ereignissen von allen Zeigegeräten, einschließlich Maus und Touchscreen, ist die Verwendung von Input Handlern. Auf dieser Seite wird der ursprüngliche Typ Qt Quick MouseArea beschrieben, der ursprünglich für die Verarbeitung von Mauseingaben konzipiert war und später für die Verarbeitung von Single-Touch-Ereignissen (in Form von synthetischen Mausereignissen) in einfachen berührungsorientierten Benutzeroberflächen eingesetzt wurde.
Maus-Typen
- MouseArea Typ
- MouseEvent Objekt
Behandlung von Mausereignissen
QML verwendet Signale und Handler, um Mausinteraktionen auszuführen. Konkret bietet Qt Quick die Typen MouseArea und MouseEvent, die es Entwicklern ermöglichen, JavaScript-Callbacks (auch Signal-Handler genannt) zu definieren, die Mausereignisse innerhalb eines definierten Bereichs annehmen.
Definieren eines Mausbereichs
Der Typ MouseArea empfängt Ereignisse innerhalb eines definierten Bereichs. Eine schnelle Möglichkeit, diesen Bereich zu definieren, ist die Verankerung von MouseArea
mit dem Bereich des übergeordneten Typs unter Verwendung der Eigenschaft anchors.fill
. Handelt es sich bei dem übergeordneten Element um eine Rectangle (oder eine beliebige Item -Komponente), dann füllt die MouseArea den durch die Abmessungen des übergeordneten Elements definierten Bereich aus. Alternativ kann auch ein Bereich definiert werden, der kleiner oder größer als der übergeordnete Bereich ist.
Rectangle { id: button width: 100; height: 100 MouseArea { anchors.fill: parent onClicked: console.log("button clicked") } MouseArea { width:150; height: 75 onClicked: console.log("irregular area clicked") } }
Empfangen von Ereignissen
Der Typ MouseArea sendet Signale als Reaktion auf verschiedene Mausereignisse. Die Dokumentation des Typs MouseArea beschreibt diese Gesten ausführlicher:
- abgebrochen
- angeklickt
- doppeltgeklickt
- eingegeben
- Verlassen
- positionChanged
- gedrücktundgehalten
- gedrückt
- freigegeben
Diese Signale können Rückrufe haben, die aufgerufen werden, wenn die Signale ausgesendet werden.
MouseArea { anchors.fill: parent onClicked: console.log("area clicked") onDoubleClicked: console.log("area double clicked") onEntered: console.log("mouse entered the area") onExited: console.log("mouse left the area") }
Aktivieren von Gesten
Einige Mausgesten und Tastenklicks müssen aktiviert werden, bevor sie Ereignisse senden oder empfangen. Bestimmte MouseArea und MouseEvent Eigenschaften aktivieren diese Gesten.
Um auf eine bestimmte Maustaste zu hören (oder sie explizit zu ignorieren), setzen Sie die entsprechende Maustaste auf die Eigenschaft acceptedButtons.
Natürlich werden die Mausereignisse, wie z. B. Tastendruck und Mausposition, während eines Mausklicks gesendet. Die Eigenschaft containsMouse
beispielsweise erhält ihren korrekten Wert nur, wenn eine Maustaste gedrückt wird. Die Eigenschaft hoverEnabled aktiviert Mausereignisse und Positionierung auch dann, wenn keine Maustaste gedrückt wird. Wenn Sie die Eigenschaft hoverEnabled
auf true
setzen, werden die Signale entered
, exited
und positionChanged
und ihre jeweiligen Signalhandler aktiviert.
MouseArea { hoverEnabled: true acceptedButtons: Qt.LeftButton | Qt.RightButton onEntered: console.log("mouse entered the area") onExited: console.log("mouse left the area") }
Um den gesamten Mausbereich zu deaktivieren, setzen Sie zusätzlich die Eigenschaft MouseArea enabled
auf false
.
MouseEvent-Objekt
Signale und ihre Callbacks erhalten ein MouseEvent Objekt als Parameter. Das mouse
Objekt enthält Informationen über das Mausereignis. Zum Beispiel wird die Maustaste, die das Ereignis ausgelöst hat, über die Eigenschaft mouse.button abgefragt.
Das Objekt MouseEvent
kann ein Mausereignis auch über seine Eigenschaft accepted
ignorieren.
Akzeptieren weiterer Signale
Viele der Signale werden mehrfach gesendet, um verschiedene Mausereignisse wie z.B. Doppelklicks zu reflektieren. Um die Klassifizierung von Mausklicks zu erleichtern, verfügt das Objekt MouseEvent über die Eigenschaft accepted
, mit der die Weiterleitung von Ereignissen deaktiviert werden kann.
Um mehr über das Ereignissystem von QML zu erfahren, lesen Sie bitte das Dokument Signale und Handler und Ereignissystem.
© 2025 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.