我有一个全局MouseArea
mouseAreaRoot占据整个屏幕,以防止在弹出窗口打开时对特定按钮执行操作。
在这个全局MouseArea
下面的QML
对象中,我有一个嵌套的MouseArea
嵌套菜单鼠标区域来处理菜单上的单击。
问题是,当我单击菜单时,鼠标事件会重定向到mouseAreaRoot
,而不是nestedMenuMouseArea
。这是人们所期望的行为,因为全局MouseArea
覆盖了整个屏幕。
我想将nestedMenuMouseArea排除在mouseAreaRoot的影响之外,该影响会阻止对其他QML
对象执行任何操作。
我读过propagateComposedEvents属性,但它似乎只适用于从子级到父级。
我希望相反:从mouseAreaRoot检测点击nestedMenuMouseArea并将事件分派给它,以触发其onClicked
代码。
由于这里没有代码,我们无法找到可视化的堆叠顺序。
完整的鼠标区域事件传播基于您的视觉堆叠顺序。
如果A是父项,B和C是A的子项,D和E是C的子项。。。
类似于:
A{
B{}
C{
D{}
E{}
}
}
粗略的视觉堆叠顺序是(如果Z值不是专门指定的(,
E D C B A.
因此,鼠标区域事件传播,从E开始,到达A。
除非某些鼠标区域的enabled
属性专门设置为false。
所以,首先也是最重要的一件事,你必须寻找…你的QML父母和孩子是如何安排的。
接下来是检查鼠标区域的enabled
是否为false。
接下来,就像"folibs"在评论中所说的那样,确保将MouseEvent.accepted
和propagateComposedEvents: true
一起设置为false