Qt Quick 输入处理器
Qt Quick 输入处理器是一组 QML 类型,用于处理来自键盘、触摸、鼠标和 stylus 设备 的事件,并在 UI 中进行处理。与事件处理项(如 MouseArea 和 Flickable)相比,输入处理器显式地非可视化,占用内存更少,旨在大量使用:每个交互方面一个处理器实例。每个输入处理器实例代表其 父 条件处理某些事件。因此,可视和行为方面的关注点得到更好的分离,并通过更精细的组成建立行为。
Qt Quick 示例 - 指针处理器演示了这些用法。
现有的Keys附加属性在概念上类似,所以我们把针对指向设备的手柄加上Keys
统称为输入处理器集。我们希望未来版本的 Qt 提供更多附加属性的使用案例。
输入处理器
拖拽处理程序 | |
鼠标和平板电脑悬停处理程序 | |
支持箭头键导航 | |
为项目提供键处理 | |
捏合手势处理程序 | |
对单个触摸点做出反应的处理程序 | |
点击和触感触处理程序 | |
鼠标滚轮处理程序 |
关键特性
一些关键特性包括
- 在焦点项内部处理按键
- 处理来自不同设备的触摸或拖拽等手势
- 以不同方式处理来自不同类别的设备的手势
- 每个项目可以有无限的处理程序
处理项目
一些处理程序只要在项目中声明即可简单添加交互性
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::grabPermissions、QQuickItem::keepMouseGrab() 和 QQuickItem::keepTouchGrab() 控制转换是否允许。
相关资料
© 2024 Qt公司有限公司。本文档贡献的内容的版权属于各自的所有者。提供的文档根据自由软件基金会发布的GNU自由文档许可协议版本1.3的条款进行许可。Qt及其相关标志是芬兰的Qt公司及其在世界其他国家的商标。所有其他商标均为其各自所有者的财产。