QML - 当我不接受鼠标按下事件时,无法获得鼠标释放事件

时间:2014-05-28 12:19:50

标签: events qml event-propagation

我想将我的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发布了

我该如何解决?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

使用propagateComposedEvents将无效,因为其行为仅针对撰写的事件定义,即clickeddoubleClickedpressAndHold之一。因此,当您在R1的mouse.accepted = false处理程序中设置onPressed时,这与propagateComposedEvents无关。

设置mouse.accepted = false代替按照文档执行的操作:

  

在按钮完成之前,不会向此MouseArea发送更多事件   接下来。

在我看来,应该只对最顶端的MouseArea上的鼠标输入作出反应。只要R1和R2彼此完全重叠,你就会使R2变得不那么简单。如果R1小于R2并且你想在R1的处理程序中为R2做一些事情,只需将R2代码移动到一个函数并从两个MouseAreas的事件处理程序中调用它。或者只使用绑定到Mouseareas的pressed状态。