3

我想将我的 onPressed 事件分派给我的 QML 树中的后续对象,(我已指示 mouse.accepted = false 和propagateComposedEvents: true )但我想保持 onreleased 事件在顶级元素上工作。这里的代码:

Item {

    width: 200
    height: 200

Rectangle {
    z: 1
    anchors.fill: parent
    MouseArea{
        anchors.fill: parent
        propagateComposedEvents: true
        onPressed: {
            console.log("R1 pressed")
            mouse.accepted = false
        }
        onReleased: {
            console.log("R1 released")
            mouse.accepted = false
        }
    }
}

Rectangle {
    z: 0
    anchors.fill: parent
    MouseArea{
        anchors.fill: parent
        propagateComposedEvents: true
        onPressed: {
            console.log("R2 pressed")
        }
        onReleased: {
            console.log("R2 released")
        }
    }
}

}

我期望看到的:

qml: R1 按下 qml: R2 按下 qml: R1 释放 qml: R2 释放

我得到什么:

qml: R1 按下 qml: R2 按下 qml: R2 释放

我该如何解决?

在此先感谢您的帮助 。

4

1 回答 1

1

UsingpropagateComposedEvents将不起作用,因为它的行为仅针对组合事件定义,这意味着clicked,doubleClicked和之一pressAndHold。所以当你mouse.accepted = false在 R1 的onPressed处理程序中设置时,这与propagateComposedEvents.

根据文档,设置mouse.accepted = false代替了它应该做的事情:

在下一次按下按钮之前,不会再向此 MouseArea 发送任何事件。

在我看来,应该只对最顶部 MouseArea 上的鼠标输入做出反应。只要 R1 和 R2 完全相互重叠,您就可以使 R2 成为它根本不是的东西。如果 R1 小于 R2,并且您想在 R1 的处理程序中为 R2 做一些事情,只需将 R2 代码移动到一个函数并从两个 MouseAreas 的事件处理程序中调用它。或者只是使用对两个 Mouseareaspressed状态的绑定。

于 2015-01-17T16:01:05.583 回答