将MouseArea事件从父母传播到孩子

时间:2018-07-24 15:00:36

标签: qml mousearea

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

在此全局QML下的MouseArea个对象中,我有一个嵌套的MouseArea nestedMenuMouseArea 处理菜单上的单击。

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

我想从 mouseAreaRoot 的效果中排除 nestedMenuMouseArea ,以防止对其他QML对象执行任何操作。

我了解了propagateComposedEvents属性,但似乎只在孩子到父母之间起作用。

我想相反:从 mouseAreaRoot 中检测到对 nestedMenuMouseArea 的点击,然后将事件发送给它,以触发其onClicked代码。

1 个答案:

答案 0 :(得分:0)

因为这里没有代码,所以我们找不到可视的堆叠顺序。

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

如果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.acceptedpropagateComposedEvents: true一起设置为false