Flickable 内的 MouseArea 正在阻止它轻弹

MouseArea inside Flickable is preventing it from flicking

我正在使用 MouseArea 实现手势捕捉器(滑动 left/right)。它应该在具有垂直 flickableDirection 的 Flickable 内部工作。此外,它还应按视觉堆栈顺序将鼠标事件传播到其下方的其他元素。问题是 propagateComposedEvents 设置为 true 的子 mouseArea 在 exact one 单击之前阻止了任何父项的轻弹。第一次点击后,它工作正常。这是显示此内容的简化代码。

import QtQuick 2.4
import QtQuick.Window 2.2

Window {
    id: __root
    visible: true
    width: 460; height: 640

    Flickable {
        id: mainFlickable

        width: parent.width
        height: parent.height
        contentHeight: column.height
        flickableDirection: Flickable.VerticalFlick

        MouseArea {
            anchors.fill: parent
            propagateComposedEvents: true
            z: 1
        }

        Column {
            id: column

            width: parent.width

            Repeater {
                model: 5

                Rectangle {
                    width: __root.width
                    height: 200

                    color: "yellow"
                    border.width: 2

                    MouseArea {
                        anchors.fill: parent

                        onClicked: {
                            console.log("clicked")
                        }
                    }
                }
            } //repeater
        } //column
    } //flickable
} //window

我花了很多时间试图解决这个问题,如果有任何帮助,我将不胜感激。提前致谢!

我几乎找不到解决方法。希望它能满足您的需求(至少在提供更好的解决方案之前)。

这是您更新后的代码:

import QtQuick 2.4
import QtQuick.Window 2.2

Window {
    id: __root
    visible: true
    width: 460; height: 640

    Flickable {
        id: mainFlickable

        width: parent.width
        height: parent.height
        contentHeight: column.height
        flickableDirection: Flickable.VerticalFlick

        onDragStarted: ma.enabled = false
        onDragEnded: ma.enabled = true

        MouseArea {
            id: ma
            anchors.fill: parent
            enabled: false
            propagateComposedEvents: true
            z: 100

            onClicked: {
                print("CLICKED ON UPPER")
                mouse.accepted = false
            }
        }

        Column {
            id: column

            width: parent.width

            Repeater {
                model: 5

                Rectangle {
                    width: __root.width
                    height: 200

                    color: "yellow"
                    border.width: 2

                    MouseArea {
                        anchors.fill: parent                  
                        onClicked: console.log("clicked on child") 
                    }
                }
            } //repeater
        } //column
    } //flickable
} //window

我发现 MouseArea 中的以下信号处理程序是解决此问题的方法,请不要破坏我的代码:

onReleased: {
    if (!propagateComposedEvents) {
        propagateComposedEvents = true
    }
}

propagateComposedEvents 应在声明中设置为 false(或省略)。

感谢大家的付出!