- Qt 5.15
- Qt Quick
- Qt Quick Input Handlers
- Qt 5.15.19 Reference Documentation

# Qt Quick Input Handlers

Qt Quick Input Handlers are a set of QML types used to handle events from keyboard, touch, mouse, and stylus devices in a UI. In contrast to event-handling items, such as MouseArea and Flickable, input handlers are explicitly non-visual, require less memory and are intended to be used in greater numbers: one handler instance per aspect of interaction. Each input handler instance handles certain events on behalf of its parent Item. Thus the visual and behavioral concerns are better separated, and the behavior is built up by finer-grained composition.

The pre-existing Keys attached property is similar in concept, so we refer to the pointing-device-oriented handlers plus `Keys` together as the set of Input Handlers. We expect to offer more attached-property use cases in future versions of Qt.

## Input Handlers

DragHandler | Handler for dragging
HoverHandler | Handler for mouse and tablet hover
KeyNavigation | Supports key navigation by arrow keys
Keys | Provides key handling to Items
PinchHandler | Handler for pinch gestures
PointHandler | Handler for reacting to a single touchpoint
TapHandler | Handler for taps and clicks
WheelHandler | Handler for the mouse wheel

## Key Features

Some of the key features are:

- Handle keystrokes within the focused Item
- Handle gestures such as tapping or dragging regardless which device it comes from
- Handle gestures from different classes of devices in different ways
- Each Item can have unlimited Handlers

## Handlers Manipulating Items

Some Handlers add interactivity simply by being declared inside an Item:

     import QtQuick 2.12

     Rectangle {
         width: 100
         height: 100
         color: "lightsteelblue"
         DragHandler { }
     }

## Handler Properties and Signals

All Handlers have properties that can be used in bindings, and signals that can be handled to react to input:

     import QtQuick 2.12

     Rectangle {
         id: button
         signal clicked

         width: 150; height: 50; radius: 3
         color: tapHandler.pressed ? "goldenrod" : hoverHandler.hovered ? "wheat" : "beige"
         border.color: activeFocus ? "brown" : "transparent"
         focus: true

         HoverHandler {
             id: hoverHandler
         }

         TapHandler {
             id: tapHandler
             onTapped: button.clicked()
         }

         Keys.onEnterPressed: button.clicked()
     }

## Pointer Grab

An important concept with Pointer Handlers is the type of grabs that they perform. The only kind of grab an Item can take is the exclusive grab: for example if you call QPointerEvent::setExclusiveGrabber(), the following mouse moves and mouse release event will be sent only to that object. (As a workaround to this exclusivity, see QQuickItem::setFiltersChildMouseEvents() and QQuickItem::childMouseEventFilter().) However Pointer Handlers have an additional mechanism available: the passive grab. Mouse and touch press events are delivered by visiting all the Items in top-down Z order: first each Item's child Handlers, and then the Item itself. At the time a press event is delivered, a Handler can take either a passive or an exclusive grab depending on its needs. If it takes a passive grab, it is guaranteed to receive the updates and the release, even if other Items or Handlers in the scene take any kind of grab, passive or exclusve. Some Handlers (such as PointHandler) can work only with passive grabs; others require exclusive grabs; and others can "lurk" with passive grabs until they detect that a gesture is being performed, and then make the transition from passive to exclusive grab.

When a grab transition is requested, PointerHandler::grabPermissions, QQuickItem::keepMouseGrab() and QQuickItem::keepTouchGrab() control whether the transition will be allowed.

## Related Information

- Qt Quick