Обработчики ввода Qt Quick
Обработчики ввода Qt Quick представляют собой набор типов QML, используемых для обработки событий от клавиатуры, сенсорного ввода, мыши и устройств стилуса в пользовательском интерфейсе. В отличие от элементов обработки событий, таких как MouseArea и Flickable, обработчики ввода явно не визуальные, требуют меньше памяти и предназначены для использования в большем количестве: по одному экземпляру обработчика на каждый аспект взаимодействия. Каждый экземпляр обработчика ввода обрабатывает определённые события от имени своего родителя Item. Таким образом, визуальные и поведенческие аспекты лучше разделяются, а поведение строится из более мелких компонентов.
Существующее свойство Keys аналогично по концепции, поэтому мы относим обработчики, ориентированные на устройства указания, плюс Keys в совокупности как набор Обработчиков ввода. Ожидается, что в будущих версиях Qt мы предложим больше случаев использования прикреплённых свойств.
Обработчики ввода
Обработчик перетаскивания |
|
Обработчик наведения курсора мыши и планшета |
|
Поддержка навигации клавишами со стрелками |
|
Обеспечивает обработку клавиш для элементов Item |
|
Обработчик жестов Pinch |
|
Обработчик реакции на одну точку касания |
|
Обработчик нажатий и кликов |
|
Обработчик колеса мыши |
Ключевые особенности
Некоторые из ключевых особенностей:
- Обработка нажатий клавиш в фокусированном элементе Item
- Обработка жестов, таких как нажатие или перетаскивание, независимо от источника устройства
- Обработка жестов разных классов устройств различными способами
- Каждый элемент Item может иметь неограниченное количество Обработчиков
Обработчики, управляющие элементами
Некоторые обработчики добавляют интерактивность, просто будучи объявленными внутри элемента Item:
import QtQuick 2.12
Rectangle {
width: 100
height: 100
color: "lightsteelblue"
DragHandler { }
} Свойства и сигналы обработчиков
Все обработчики имеют свойства, которые можно использовать в привязках, и сигналы, которые можно обработать для реагирования на ввод:
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()
} Захват указателя
Важной концепцией для обработчиков указателей является тип захвата, который они выполняют. Единственный вид захвата, который может захватить элемент Item, это эксклюзивный захват: например, если вы вызываете QPointerEvent::setExclusiveGrabber(), следующие события движения мыши и отпускания мыши будут отправлены только этому объекту. (В качестве обходного решения этой эксклюзивности см. QQuickItem::setFiltersChildMouseEvents() и QQuickItem::childMouseEventFilter().) Однако у обработчиков указателя есть дополнительный механизм: пассивный захват. События нажатия мыши и сенсорного ввода доставляются, посещая все элементы Item в порядке сверху вниз по Z-порядку: сначала каждый обработчик дочерних элементов Item, а затем сам элемент Item. В момент доставки события нажатия обработчик может захватить либо пассивный, либо эксклюзивный захват в зависимости от его потребностей. Если он захватывает пассивный захват, ему гарантируется получение обновлений и отпускания, даже если другие элементы Item или обработчики в сцене захватывают любой тип захвата, пассивный или эксклюзивный. Некоторые обработчики (например, PointHandler) могут работать только с пассивными захватами; другие требуют эксклюзивных захватов; а другие могут «подглядывать» с пассивным захватом до тех пор, пока не обнаружат, что выполняется жест, а затем перейти от пассивного к эксклюзивному захвату.
Когда запрашивается переход захвата, PointerHandler::grabPermissions, QQuickItem::keepMouseGrab() и QQuickItem::keepTouchGrab() контролируют, будет ли переход разрешен.
Связанная информация
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qtquickhandlers-index.html