如何阻止和不将MouseArea的containsMouse属性传播给父对象?

时间:2019-05-11 03:39:13

标签: qml qt5 mouseevent

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

但是相反的方法是,如果我不想共享移动事件,那么该如何阻止移动信号,所以当子项出现时,父MouseArea不会hoverEnabled: true(假设两者都有MouseArea )?

编辑:

以下是一个小示例应用程序,用于说明我在说什么。
基本上,我正在寻找一种外部ma1(( containsMouse),当鼠标悬停在内部MouseArea上时,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" } } } }

filter_var[speed = 4L]

2 个答案:

答案 0 :(得分:0)

实际上,请求的功能应该可以立即使用。每次卡住东西时,尝试从头开始创建一个单独的项目。

看看我为您准备的bit simpler code。这是纯QML。另外,由于所有内容均按逻辑顺序放置-无需提供堆叠顺序(z参数)。

答案 1 :(得分:0)

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

  

...这种情况的解决方法可能会破坏父子   关系或拥有另一个[custom]属性...