MultiPointTouchArea QML 类型

使处理多个触摸点成为可能。 更多信息...

导入声明import QtQuick
继承

Item

属性

信号

详细描述

MultiPointTouchArea 是一个用于跟踪多个触摸点的不可见项。

使用 Item::enabled 属性来启用和禁用触摸处理。当禁用时,触摸区域对鼠标和触摸事件来说是透明的。

默认情况下,鼠标将被处理为单个触摸点,并且位于触摸区域下的项将不会接收到鼠标事件,因为触摸区域正在处理它们。但是如果将 mouseEnabled 属性设置为 false,它将变得对鼠标事件透明,这样就可以使用另一个鼠标敏感的 Item(如 MouseArea)来单独处理鼠标交互。

MultiPointTouchArea 可以以两种方式使用

  • 设置 touchPoints 来提供可以绑定的具有属性的触摸点对象
  • 使用 onTouchUpdated、onPressed、onUpdated 和 onReleased 处理器

虽然 MultiPointTouchArea 可以 排他地拥有某些触摸点,但也可以同时激活多个 MultiPointTouchArea,每个都在不同的触摸点集合上操作。

参见 TouchPoint.

属性文档

maximumTouchPoints : int

minimumTouchPoints : int

这些属性包含要由触摸区域处理的触摸点范围。

这些便利性允许您拥有嵌套的MultiPointTouchAreas,一个处理两只手指的触摸,另一个处理三只手指的触摸。

默认情况下,处理区域内所有的触摸点。

如果mouseEnabled为true,则鼠标的行为像一个触摸点,因此它也受到以下约束:例如,如果maximumTouchPoints为两个,则可以使用鼠标作为一只触摸点,手指作为另一只触摸点,总共两个。


mouseEnabled : bool

此属性控制MultiPointTouchArea是否处理鼠标事件。如果为true(默认值),则触摸区域将把鼠标视为单个触摸点;如果为false,则触摸区域将忽略鼠标事件并允许它们“通过”以便由下面的其他项处理。


touchPoints : list<TouchPoint> [只读]

此属性包含一组用户定义并可以绑定的触摸点对象。

如果mouseEnabled为true(默认值)并且鼠标左键在鼠标悬停在触摸区域内时被按下,则当前鼠标位置将是这些触摸点之一。

在以下示例中,我们有两个小矩形,它们跟随我们的触摸点。

import QtQuick

Rectangle {
    width: 400; height: 400
    MultiPointTouchArea {
        anchors.fill: parent
        touchPoints: [
            TouchPoint { id: point1 },
            TouchPoint { id: point2 }
        ]
    }

    Rectangle {
        width: 30; height: 30
        color: "green"
        x: point1.x
        y: point1.y
    }

    Rectangle {
        width: 30; height: 30
        color: "yellow"
        x: point2.x
        y: point2.y
    }
}

默认情况下,此属性保留一个空列表。

参见 TouchPoint.


信号文档

canceled(list<TouchPoint> touchPoints)

当新的触摸事件因为其他项占用触摸事件处理而被取消时,会发射此信号。

此信号用于高级用法:在存在多个处理输入的MultiPointTouchArea或者在一个Flickable内有一个MultiPointTouchArea时,它很有用。在后一种情况下,如果在onPressed信号处理程序中执行了一些逻辑然后开始拖动,Flickable可能会从MultiPointTouchArea那里夺取触摸处理。在这些情况下,当MultiPointTouchArea失去了触摸处理权给Flickable时,除released外还应处理canceled

touchPoints是取消的触摸点列表。

注意:如果您在信号处理程序代码中使用touchPoints参数,最好将它在形式参数中的名称重命名以避免与属性touchPoints混淆(请参阅QML编码约定

onCanceled: (points) => console.log("canceled", points.length)

注意:相应处理器是onCanceled


gestureStarted(GestureEvent gesture)

当全局拖动阈值达到时,会发射此信号。

此信号通常用于MultiPointTouchArea被嵌套在Flickable或其他MultiPointTouchArea的情况。当达到阈值并且处理了信号后,您可以确定触摸区域是否应该捕获当前的触摸点。默认情况下将不会抓取;要抓取它们,请调用gesture.grab()。如果手势没有被抓取,嵌套的Flickable,例如,也会有机会抓取。

手势对象还包括关于当前《touchPoints》集和《dragThreshold》的信息。

注意:相应的处理程序是《onGestureStarted》。


pressed(列表<TouchPoint> touchPoints)

当添加新触摸点时,会发出此信号。touchPoints是新点的列表。

如果《minimumTouchPoints》设置为大于一的值,只有达到所需的最低触摸点数量时,才会发出此信号。

注意:如果您在信号处理程序代码中使用touchPoints参数,最好将它在形式参数中的名称重命名以避免与属性touchPoints混淆(请参阅QML编码约定

onPressed: (points) => console.log("pressed", points.length)

注意:相应的处理程序是《onPressed》。


released(列表<TouchPoint> touchPoints)

当移除现有触摸点时,会发出此信号。touchPoints是移除点的列表。

注意:如果您在信号处理程序代码中使用touchPoints参数,最好将它在形式参数中的名称重命名以避免与属性touchPoints混淆(请参阅QML编码约定

onReleased: (points) => console.log("released", points.length)

注意:相应的处理程序是《onReleased》。


touchUpdated(列表<TouchPoint> touchPoints)

当《MultiPointTouchArea》处理的触摸点发生变化时,会发出此信号。这包括添加新触摸点,移除或取消先前的触摸点,以及更新当前触摸点数据。touchPoints是所有当前触摸点的列表。

注意:相应的处理程序是《onTouchUpdated》。


updated(列表<TouchPoint> touchPoints)

当现有触摸点更新时,会发出此信号。touchPoints是这些更新点的列表。

注意:如果您在信号处理程序代码中使用touchPoints参数,最好将它在形式参数中的名称重命名以避免与属性touchPoints混淆(请参阅QML编码约定

onUpdated: (points) => console.log("updated", points.length)

注意:相应的处理程序是《onUpdated》。


© 2024 Qt公司有限公司。在此包含的文档贡献为各自所有者的版权。在此提供的文档根据自由软件基金会发布的《GNU自由文档许可版1.3》条款许可。Qt及其相应商标是芬兰及/或世界其他国家的Qt公司商标。所有其他商标均为其各自所有者的财产。