有两个负责两个不同职责的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/

10-11 21:49