Qml 如何阻止和不将MouseArea的containsMouse属性传播到父级?

Qml 如何阻止和不将MouseArea的containsMouse属性传播到父级?,qml,qt5,mouseevent,Qml,Qt5,Mouseevent,您应该保持父子关系,以便将MouseArea的移动事件传播到其他重叠且视觉堆叠顺序较低的MouseArea 但是如何做相反的事情,也就是如果我不想共享移动事件,如何阻止移动信号,这样父MouseArea就不会包含子Mouse(假设两者都启用了hoverEnabled:true) 编辑: 这里有一个小示例应用程序来说明我所说的内容。基本上,我在寻找一些优雅的方式(如果可能的话,请使用qml,但任何解决方案都会很感激),使外部的MouseArea(ma1)在鼠标位于内部MouseArea上方时具有c

您应该保持父子关系,以便将
MouseArea
的移动事件传播到其他重叠且视觉堆叠顺序较低的
MouseArea

但是如何做相反的事情,也就是如果我不想共享移动事件,如何阻止移动信号,这样父MouseArea就不会
包含子Mouse
(假设两者都启用了
hoverEnabled:true

编辑:

这里有一个小示例应用程序来说明我所说的内容。
基本上,我在寻找一些优雅的方式(如果可能的话,请使用qml,但任何解决方案都会很感激),使外部的
MouseArea
ma1
)在鼠标位于内部MouseArea上方时具有
containsMouse
等于
false

import QtQuick 2.12
import QtQuick.Controls 2.5

ApplicationWindow{
    width: 640
    height: 480
    visible: true

    MouseArea {
        id: ma1

        anchors.fill: parent
        hoverEnabled: true

        MouseArea {
            anchors.centerIn: parent
            width: parent.width * Math.log(2)
            height: parent.height * Math.log(2)
            hoverEnabled: true
            z: 1

//            onPositionChanged: mouse.accepted = true;
//            onMouseXChanged:  mouse.accepted = true;
//            onMouseYChanged:  mouse.accepted = true;
//            onEntered: { ma1.hoverEnabled = false; ma1.enabled = false; }
//            onExited: ma1.hoverEnabled = true;

            Component.onCompleted: bg.createObject(this, { "hovered": Qt.binding(function() { return containsMouse; }) } );
        }

        Component.onCompleted: bg.createObject(this, { "hovered": Qt.binding(function() { return containsMouse; }) } );
    }

    Component {
        id: bg

        Rectangle {
            property bool hovered: false

            anchors.fill: parent
            color: hovered ? "green" : "red"
            border.width: 1

            Text {
                anchors {
                    top: parent.top
                    horizontalCenter: parent.horizontalCenter
                }
                text: (!parent.hovered ? "un" : "") + "hovered"
                color: "white"
            }
        }
    }
}

实际上,请求的功能应该是现成的。每次你坚持做某事时,试着从头开始创建一个单独的项目


看一看我为你准备的。它是纯QML。另外,由于所有的功能都是按逻辑顺序放置的,所以不需要提供堆叠顺序(
z
参数)。

实际上,请求的功能应该是现成的。每次你坚持做某事时,试着从头开始创建一个单独的项目


看一看我为你准备的。它是纯QML。此外,由于所有内容都是按逻辑顺序放置的,因此不需要提供堆叠顺序(
z
参数)。

因此,根据Qt支持,在保持两个
MouseArea
之间的父子关系的同时,无法使用
containsMouse
属性来实现这一点

…这种情况的解决办法可能是打破父子关系 关系或具有其他[自定义]属性


因此,根据Qt支持,在保持两个
MouseArea
s之间的父子关系的同时,无法使用
containsMouse
属性来实现这一点

…这种情况的解决办法可能是打破父子关系 关系或具有其他[自定义]属性


您能否提供一些您已经尝试过的代码示例,以便更好地理解您将得到什么?添加了一个示例@TroyaneCoull您是否可以提供一些您已经尝试过的代码示例,以便更好地理解您将得到什么?添加了一个示例@troyaneIm正在寻找适用于具有父子关系的
MouseArea
s的方法。我的问题中有“家长”部分,但我同意我没有充分强调这一点,我的错。我知道hover不是在不相关的MouseArea之间共享的,或者您可以编写一些自定义属性,如
hover:ma1.containsMouse&!ma2.containsMouse
,但我对父子设置和
containsMouse
属性传播非常感兴趣。我正在寻找一种适用于具有父子关系的
MouseArea
s的方法。我的问题中有“家长”部分,但我同意我没有充分强调这一点,我的错。我知道hover不是在不相关的MouseArea之间共享的,或者您可以编写一些自定义属性,如
hover:ma1.containsMouse&!ma2.containsMouse
,但我对父子设置和
containsMouse
属性传播非常感兴趣。