Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Events QML-Can';当我不';不接受鼠标按下事件_Events_Qml_Event Propagation - Fatal编程技术网

Events QML-Can';当我不';不接受鼠标按下事件

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

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

我怎样才能解决这个问题


提前感谢您的帮助。

使用
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
无关?。虽然可能有这样的记录,但引用的行是错误的。如果您有两个
鼠标区域
,则下部处理
按住
单击
-信号,上部处理
按下
单击
-信号。上层系统传播合成信号,在
单击的
-事件中不接受鼠标,下层系统不接受鼠标(在
按住
)。现在,下一个点击了进一步的事件
,尽管他以前没有在同一个按键上接受鼠标。