Подтвердить что ты не робот

QML - MouseArea - распространение наPositionChanged

Можно ли распространять событие MouseArea positionChanged на базовое?

Я попытался установить mouse.accepted в false для любого существующего обработчика сигнала самого верхнего MouseArea, а также для установки propagateComposedEvents на true. Ни один из них не работал (хотя я не удивлен тем, что propagateComposedEvents не работает, так как в документации говорится, что он передает только такие события, как clicked, doubleClicked и pressAndHold).

4b9b3361

Ответ 1

В зависимости от вашей структуры вы всегда можете вручную распространять событие, указав вызов обработчика onPositionChanged basicMouseArea.positionChanged(мышь). Это должно вручную излучать сигнал в базовой MouseArea. Моя единственная проблема заключается в том, что вы не сможете передать объект MouseEvent таким образом (никогда не пробовали ни с чем, кроме строки). Тем не менее, вы всегда можете выполнить это ручное испускание на С++, которое, безусловно, не пострадает от каких-либо проблем с преобразованием типов.

Ответ 2

Если вам не нужно обрабатывать события изменения позиции с несколькими областями мыши одновременно, вы можете попробовать восстановить свою верхнюю область мыши:

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');
        }
    }
}

Существует неразрешенный bugreport.