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
属性传播非常感兴趣。