【问题标题】:Propagating MouseArea events from parent to child将 MouseArea 事件从父级传播到子级
【发布时间】:2018-07-24 15:00:36
【问题描述】:

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

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

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

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

我读到了propagateComposedEvents 属性,但它似乎只适用于子级到父级

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

【问题讨论】:

标签: qml mousearea


【解决方案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.acceptedpropagateComposedEvents: true一起设置为false

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-04
    • 2023-03-03
    • 2016-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多