QML - MouseArea - 传播onPositionChanged

时间:2013-07-30 23:46:31

标签: qt qml qt-quick qtquick2

是否可以将MouseArea的positionChanged事件传播到基础事件?

我尝试为最顶层mouse.accepted的任何现有信号处理程序设置falseMouseArea,并将propagateComposedEvents设置为{{1 }}。这些都没有奏效(虽然我对true无法正常工作感到惊讶,因为文档说它只会传递propagateComposedEventsclickeddoubleClicked等事件。

2 个答案:

答案 0 :(得分:3)

根据您的结构,您可以通过让onPositionChanged处理程序调用underlyingMouseArea.positionChanged(mouse)来手动传播事件。这应该在底层MouseArea中手动发出信号。我唯一担心的是你可能无法以这种方式传递MouseEvent对象(从未尝试过除字符串以外的任何东西)。但是,您始终可以在C ++中执行本手册发射,这绝对不会受到任何类型转换问题的影响。

答案 1 :(得分:1)

除非您需要同时处理多个鼠标区域的位置更改事件,否则您可以尝试重新显示鼠标顶部区域:

import QtQuick 2.2
import QtQuick.Layouts 1.1

Rectangle {
    id: __root
    color: "lightgreen"
    width: 360
    height: 360

    Rectangle {
        id: rect2
        width: 100; height: 100
        color: "cyan"
        MouseArea {
            parent: __root // set 'logical' parent
            anchors.fill: rect2 // set 'visual' ancestor
            hoverEnabled: true

            onPositionChanged: {
                console.log('mouse area 2 onPositionChanged');
            }
        }
    }


    MouseArea {
        anchors.fill: parent
        hoverEnabled: true

        onPositionChanged: {
            console.log('mouse area 1 onPositionChanged');
        }
    }
}

unresolved bugreport