首页 文章

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

提问于
浏览
0

我有问题,如何通过qml中的MouseArea检测滑动?

此代码来自文档:

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 ?
        }
    }
}

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

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

1 回答

  • 1

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

    Touch -> Movement -> Release
    

    所以这正是你检测它的方式:

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

    你需要考虑的事情:最后一次移动可能很短,因为用户在发布之前放慢速度,或者因为他发布了两个步骤之间 . 因此,仅考虑最后一个向量可能会产生不良结果 .

    相反,你可以累积最后n个向量,应用一些权重 .

    如果用定时器替换 onPositionChanged 以使分析间隔更长,也可以改进 . 您可以使用间隔来查找最佳行为 .

    因为实现一个精细调整的检测算法并不容易,我建议重新考虑一下,是否有必要自己实现检测,或者是否已经实现了滑动行为的许多 Item 可能就足够了 .

相关问题