Qt Quick 输入处理器

Qt Quick 输入处理器是一组 QML 类型,用于处理来自键盘、触摸、鼠标和 stylus 设备事件,并在 UI 中进行处理。与事件处理项(如 MouseAreaFlickable)相比,输入处理器显式地非可视化,占用内存更少,旨在大量使用:每个交互方面一个处理器实例。每个输入处理器实例代表其 条件处理某些事件。因此,可视和行为方面的关注点得到更好的分离,并通过更精细的组成建立行为。

Qt Quick 示例 - 指针处理器演示了这些用法。

现有的Keys附加属性在概念上类似,所以我们把针对指向设备的手柄加上Keys统称为输入处理器集。我们希望未来版本的 Qt 提供更多附加属性的使用案例。

输入处理器

DragHandler

拖拽处理程序

HoverHandler

鼠标和平板电脑悬停处理程序

KeyNavigation

支持箭头键导航

Keys

为项目提供键处理

PinchHandler

捏合手势处理程序

PointHandler

对单个触摸点做出反应的处理程序

TapHandler

点击和触感触处理程序

WheelHandler

鼠标滚轮处理程序

关键特性

一些关键特性包括

  • 在焦点项内部处理按键
  • 处理来自不同设备的触摸或拖拽等手势
  • 以不同方式处理来自不同类别的设备的手势
  • 每个项目可以有无限的处理程序

处理项目

一些处理程序只要在项目中声明即可简单添加交互性

import QtQuick

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

处理程序属性和信号

所有处理程序都有可用于绑定的属性和可用于处理输入的信号

import QtQuick

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。)然而,指针处理器还有一个额外的机制可供使用:即被动捕获。鼠标和触摸按下事件将通过遍历顶部到bottom的Z顺序的所有Item传递:首先每个Item的子处理器,然后是Item本身。在按下事件传递时,处理器可以根据其需求采取被动或独占捕获。如果采用被动捕获,即使场景中的其他Item或处理器采取任何类型的捕获(被动或独占),处理器也可以保证收到更新和释放。一些处理器(如PointHandler)只能与被动捕获一起工作;其他需要独占捕获;而其他可以“潜伏”以被动捕获,直到检测到一个手势正在进行,然后从被动切换到独占捕获。TapHandler的捕获行为是可以配置的

当请求捕获转换时,PointerHandler::grabPermissionsQQuickItem::keepMouseGrab() 和 QQuickItem::keepTouchGrab() 控制转换是否允许。

© 2024 Qt公司有限公司。本文档贡献的内容的版权属于各自的所有者。提供的文档根据自由软件基金会发布的GNU自由文档许可协议版本1.3的条款进行许可。Qt及其相关标志是芬兰的Qt公司及其在世界其他国家的商标。所有其他商标均为其各自所有者的财产。