我想将我的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发布了
我该如何解决?
提前感谢您的帮助。
答案 0 :(得分:1)
使用propagateComposedEvents
将无效,因为其行为仅针对撰写的事件定义,即clicked
,doubleClicked
和pressAndHold
之一。因此,当您在R1的mouse.accepted = false
处理程序中设置onPressed
时,这与propagateComposedEvents
无关。
设置mouse.accepted = false
代替按照文档执行的操作:
在按钮完成之前,不会向此MouseArea发送更多事件 接下来。
在我看来,应该只对最顶端的MouseArea上的鼠标输入作出反应。只要R1和R2彼此完全重叠,你就会使R2变得不那么简单。如果R1小于R2并且你想在R1的处理程序中为R2做一些事情,只需将R2代码移动到一个函数并从两个MouseAreas的事件处理程序中调用它。或者只使用绑定到Mouseareas的pressed
状态。