有两个负责两个不同职责的MouseArea,一个(绿色)部分位于另一个(红色)上方。每当悬停红色MA(即使它在绿色MA下)时,我都想更改光标的形状,并且我希望绿色MA对按下使用react,而没有其他事情。
两个MA可能位于不同的文件中,所以我不想在它们之间建立显式的依赖关系,例如每当红色更改containsMouse时就将正确的cursorShape设置为绿色。有没有办法防止绿色的MouseArea处理光标形状?
import QtQuick 2.4
import QtQuick.Window 2.2
Window {
visible: true
width: 200
height: 200
Rectangle { anchors.fill: parent; color: "yellow"; }
MouseArea {
width: 150
height: 150
hoverEnabled: true
cursorShape: Qt.OpenHandCursor
Rectangle { anchors.fill: parent; color: "red"; }
onPositionChanged: console.log("position", mouse.x, mouse.y)
onContainsMouseChanged: console.log("containsMouse", containsMouse)
}
MouseArea {
x: 50
y: 50
width: 150
height: 150
hoverEnabled: false
Rectangle { anchors.fill: parent; color: "green"; }
onPressed: console.log("Ahoj!")
}
}
最佳答案
无法通过MouseArea
属性或任何其他现成的解决方案来执行此操作。 MouseArea
始终设置一些光标形状-如果未指定cursorShape属性,则使用默认值(Qt.ArrowCursor
)
您当然可以使用mapToItem()
/mapFromItem()
解决此问题(如Mitch建议)。但是,还有其他可能性:
您可以将visible
临时更改为覆盖鼠标区域的false
。
或者,如果两个MouseArea
都是同级,则可以对z
属性进行操作以获得适合您需要的特定对象层次结构。
关于qt - 当MouseArea被另一个MouseArea覆盖时,如何在qml中更改光标形状,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27821054/