【Qt6】 MouseArea鼠标穿透

mouse.accepted : 控制合成事件和基本事件的传递

propagateComposedEvents 是控制合成事件在组件间的传递穿透

import QtQuick
import QtQuick.VirtualKeyboard

Window {
    id: window
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")
    color: "gray"

    Rectangle{
        height: 100
        width: 100
        anchors.centerIn: parent
        MouseArea{
            anchors.fill: parent

            onPressed: {
                console.log("press A")
            }

            onClicked: {
                console.log("click A")
            }
        }
    }

    Rectangle{
        height: 100
        width: 100
        anchors.centerIn: parent
        MouseArea{
            anchors.fill: parent

            onPressed: {
                console.log("press B")
                mouse.accepted = false // 穿透,基本事件不受propagateComposedEvents影响
            }

            onClicked: {
                console.log("click B")
                mouse.accepted = false // 合成事件穿透
            }

            // 对于所有基本事件(pressed),mouse.accepted = false ,事件未被接受,则继续按照视觉或堆栈顺序向下传递
            // 对于合成事件(clicked),除了mouse.accepted,propagateComposedEvents也会拦截传递行为
            propagateComposedEvents: true // 合成事件可以穿透组件层
        }
    }
}

posted @ 2025-05-14 13:53  丘狸尾  阅读(44)  评论(0)    收藏  举报