首页 文章

QML - MouseArea - 传播onPositionChanged

提问于
浏览
12

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

我试图将 mouse.accepted 设置为 false 用于最顶层 MouseArea 的任何现有信号处理程序,并将 propagateComposedEvents 设置为 true . 这两个都没有奏效(虽然我对 propagateComposedEvents 没有工作并不感到惊讶,因为文档说它只传递 clickeddoubleClickedpressAndHold 等事件) .

2 回答

  • 1

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

  • 3

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

    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 .

相关问题