Spec-Zone.ru › Qt

Обработчики ввода Qt Quick

Обработчики ввода Qt Quick представляют собой набор типов QML, используемых для обработки событий от клавиатуры, сенсорного ввода, мыши и устройств стилуса в пользовательском интерфейсе. В отличие от элементов обработки событий, таких как MouseArea и Flickable, обработчики ввода явно не визуальные, требуют меньше памяти и предназначены для использования в большем количестве: по одному экземпляру обработчика на каждый аспект взаимодействия. Каждый экземпляр обработчика ввода обрабатывает определённые события от имени своего родителя Item. Таким образом, визуальные и поведенческие аспекты лучше разделяются, а поведение строится из более мелких компонентов.

Существующее свойство Keys аналогично по концепции, поэтому мы относим обработчики, ориентированные на устройства указания, плюс Keys в совокупности как набор Обработчиков ввода. Ожидается, что в будущих версиях Qt мы предложим больше случаев использования прикреплённых свойств.

Обработчики ввода

DragHandler

Обработчик перетаскивания

HoverHandler

Обработчик наведения курсора мыши и планшета

KeyNavigation

Поддержка навигации клавишами со стрелками

Keys

Обеспечивает обработку клавиш для элементов Item

PinchHandler

Обработчик жестов Pinch

PointHandler

Обработчик реакции на одну точку касания

TapHandler

Обработчик нажатий и кликов

WheelHandler

Обработчик колеса мыши

Ключевые особенности

Некоторые из ключевых особенностей:

  • Обработка нажатий клавиш в фокусированном элементе 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() контролируют, будет ли переход разрешен.

Связанная информация

  • Qt Quick

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qtquickhandlers-index.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API