Как заблокировать и не распространять свойство containsMouse MouseArea на родительское? - PullRequest
0 голосов
/ 11 мая 2019

Вы должны сохранить отношения родитель-потомок, чтобы распространять события перемещения MouseArea на другие MouseArea, которые перекрываются и находятся ниже в порядке визуального размещения. *

Но как поступить наоборот, то есть, как заблокировать сигналы перемещения, если я не хочу делиться событиями перемещения, поэтому родительский MouseArea не containsMouse, когда у дочернего элемента (при условии, что оба имеют hoverEnabled: true)?

Edit:

Вот небольшой пример приложения для иллюстрации того, о чем я говорю.
По сути, я ищу какой-то элегантный (qml, только если возможно, но было бы желательно любое решение) способ для внешнего MouseArea (ma1 ), чтобы containsMouse было равно false, когда мышь находится над внутренней областью мыши.

import QtQuick 2.12
import QtQuick.Controls 2.5

ApplicationWindow{
    width: 640
    height: 480
    visible: true

    MouseArea {
        id: ma1

        anchors.fill: parent
        hoverEnabled: true

        MouseArea {
            anchors.centerIn: parent
            width: parent.width * Math.log(2)
            height: parent.height * Math.log(2)
            hoverEnabled: true
            z: 1

//            onPositionChanged: mouse.accepted = true;
//            onMouseXChanged:  mouse.accepted = true;
//            onMouseYChanged:  mouse.accepted = true;
//            onEntered: { ma1.hoverEnabled = false; ma1.enabled = false; }
//            onExited: ma1.hoverEnabled = true;

            Component.onCompleted: bg.createObject(this, { "hovered": Qt.binding(function() { return containsMouse; }) } );
        }

        Component.onCompleted: bg.createObject(this, { "hovered": Qt.binding(function() { return containsMouse; }) } );
    }

    Component {
        id: bg

        Rectangle {
            property bool hovered: false

            anchors.fill: parent
            color: hovered ? "green" : "red"
            border.width: 1

            Text {
                anchors {
                    top: parent.top
                    horizontalCenter: parent.horizontalCenter
                }
                text: (!parent.hovered ? "un" : "") + "hovered"
                color: "white"
            }
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 17 мая 2019

Итак, согласно Qt Support , нет способа сделать это со свойством containsMouse, сохраняя отношения родитель-потомок между двумя MouseArea s.

... Обходной путь для этой ситуации может быть сломать родительский ребенок отношения или наличие другого [пользовательского] свойства ...

0 голосов
/ 15 мая 2019

На самом деле, запрошенная функция должна работать из коробки.Каждый раз, когда вы застряли на чем-то, попробуйте создать отдельный проект с нуля.

Взгляните на немного более простой код , который я подготовил для вас.Это чистый QML.Кроме того, поскольку все размещено в логическом порядке - нет необходимости указывать порядок размещения (параметр z).

...