1

我有一个全局MouseArea mouseAreaRoot占用整个屏幕,以防止在打开弹出窗口时对特定按钮进行操作。

QML这个 global 下方的对象中MouseArea,我有一个嵌套的MouseArea nestedMenuMouseArea 来处理我的菜单上的点击。

问题是当我点击菜单时,鼠标事件被重定向到mouseAreaRoot而不是nestedMenuMouseArea. 这是人们所期望的行为,因为全局MouseArea覆盖了整个屏幕。

我想从 mouseAreaRoot 的效果中排除nestedMenuMouseArea会阻止对其他对象的任何操作。QML

我阅读了有关propagateComposedEvents属性的信息,但它似乎只适用于从child 到 parent

我希望相反:从 mouseAreaRoot 检测到对nestedMenuMouseArea的单击并将事件分派给它以触发其onClicked代码。

4

1 回答 1

1

由于这里没有代码,我们无法找到视觉堆叠顺序。

完整的鼠标区域事件传播基于您的视觉堆叠顺序。

如果 A 是父项,B 和 C 是 A 的孩子,D 和 E 是 C 的孩子......

就像是:

A{
    B{}

    C{
       D{}
       E{}
     }
 }

粗略的视觉堆叠顺序是(如果没有专门指定 Z 值),

E D C B A.

所以鼠标区域事件传播,从 E 开始,到达 A。

除非某些鼠标区域的enabled属性专门设置为 false。

因此,您首先要寻找的也是最重要的事情是.... QML 父子关系的排列方式。

接下来是检查enabled鼠标区域是否为假。

接下来就像评论中所说的“folibs”,确保你设置MouseEvent.accepted为falsepropagateComposedEvents: true

于 2018-07-24T18:06:31.320 回答