Qt Quick 输入处理程序
Qt Quick 输入处理程序是一组 QML 类型,用于处理用户界面中来自键盘、触摸、鼠标和触控笔 的 。与事件处理项目(如 和 )相比,输入处理程序显然是非可视的,所需的内存较少,而且可以大量使用:每个交互方面都有一个处理程序实例。每个输入处理程序实例代表其 项处理某些事件。这样,视觉和行为的关注点就能更好地分离,而行为则是通过更细粒度的组合建立起来的。devices events MouseArea Flickable parent
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() }
指针抓取
指针处理程序的一个重要概念是它们执行的抓取类型。一个项目可以执行的唯一抓取类型是排他性抓取:例如,如果您调用QPointerEvent::setExclusiveGrabber() ,接下来的鼠标移动和鼠标释放事件将只发送给该对象。(关于这种排他性的变通方法,请参见QQuickItem::setFiltersChildMouseEvents() 和QQuickItem::childMouseEventFilter())。不过,指针处理程序还有一个额外的机制可用:passive grab 。鼠标和触摸press 事件是通过按自上而下的 Z 顺序访问所有项目来发送的:首先是每个项目的子处理程序,然后是Item 本身。在按压事件发生时,处理程序可根据自身需要采取被动抓取或独家抓取两种方式。如果采用被动抓取,即使场景中的其他项目或处理程序采用任何形式的抓取(无论是被动抓取还是独家抓取),它也能保证接收到更新和释放。有些处理程序(如PointHandler )只能使用被动抓取;其他处理程序则需要独家抓取;还有一些处理程序可以 "潜伏 "使用被动抓取,直到检测到有人在做手势,然后再从被动抓取过渡到独家抓取。TapHandler在''抓取''中的抓取行为是configurable 。
请求抓取过渡时,PointerHandler::grabPermissions 、QQuickItem::keepMouseGrab() 和QQuickItem::keepTouchGrab() 控制是否允许过渡。
相关信息
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.