Events QML-Can';当我不';不接受鼠标按下事件
我想将onPressed事件分派给QML树中的后续对象(我已指示mouse.accepted=false和propagateComposedEvents:true),但我想让onreleased事件在顶层元素上工作。。 代码如下:Events QML-Can';当我不';不接受鼠标按下事件,events,qml,event-propagation,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
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发布
我怎样才能解决这个问题
提前感谢您的帮助。使用
propagateComposedEvents
将不起作用,因为它的行为仅为合成事件定义,这意味着单击、双击
和按住中的一个。因此,当您在R1的onPressed
处理程序中设置mouse.accepted=false
时,这与propagateComposedEvents
无关
设置mouse.accepted=false
会执行文档中规定的操作:
在按下按钮之前,不会向该鼠标发送更多事件a
下一次按下
在我看来,人们应该只对最上面的鼠标earea上的鼠标输入做出反应。只要R1和R2完全重叠,你就可以让R2成为它根本不是的东西。如果R1小于R2,并且您希望在R1的处理程序中为R2做一些事情,只需将R2代码移动到一个函数,并从两个MouseAreas的事件处理程序中调用它。或者只对两个Mouseareas'pressed
状态使用绑定。您如何假设mouse.accepted=false
与propagateComposedEvents
无关?。虽然可能有这样的记录,但引用的行是错误的。如果您有两个鼠标区域
,则下部处理按住
和单击
-信号,上部处理按下
和单击
-信号。上层系统传播合成信号,在单击的-事件中不接受鼠标,下层系统不接受鼠标(在按住)。现在,下一个点击了进一步的事件,
,尽管他以前没有在同一个按键上接受鼠标。