通过 MouseArea Qt QML 检测向左或向右滑动

Mr.*_*per 5 qt android swipe qml ios

我有问题,如何在 qml 中检测鼠标区域的滑动?

此代码,来自文档:

    Rectangle {
    id: container
    width: 600; height: 200

    Rectangle {
        id: rect
        width: 500; height: 500

        MouseArea {
            anchors.fill: parent
            drag.target: rect
            drag.axis: Drag.XAxis
            drag.minimumX: 0
            drag.maximumX: container.width - rect.width

            //event slide here ?
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但我不明白如何向左或向右滑动,我在移动应用程序(ios 和 android)中得到了这个用法。

有人可以帮助我吗?谢谢。如何检测用手指向左或向右滑动?谢谢。

der*_*erM 3

滑动是一个简单的事件链:

Touch -> Movement -> Release
Run Code Online (Sandbox Code Playgroud)

这就是您检测它的方式:

您初始化一些变量(例如originX/Y)onPressed,然后检测运动onPositionChanged,计算原点和当前位置之间的矢量,分析长度和方向以评估方向和速度。设置originX/Y到新位置并继续直到onReleased。然后您可以确定是否是滑动(取决于最后一个向量或运动的历史记录 - 为此以某种方式存储或累积计算出的向量)

您需要考虑的事项:最后一个动作可能会很短,因为用户在释放之前减慢速度,或者因为在两个步骤之间释放。因此,仅考虑最后一个向量可能会产生不好的结果。

相反,您可以累积最后 n 个向量,并应用一些权重。

此外,如果您用计时器替换onPositionChanged以获得更长的分析间隔,您可能会有所改进。您可以调整间隔来找到最佳行为。

由于实现一个经过微调的检测算法并不简单,我建议重新考虑是否有必要自己实现检测,或者Item实现滑动行为的众多 s 中的一个是否就足够了。