qml mousearea некорректно срабатывает при переходе в зону кнопки

пытаюсь сделать зону при входе в которую кнопка становится видимой. первый способ не подходит, т.к кнопка при наведении начинает мограть (идет быстрое срабатывание выхода\входа в mousearea) второй тоже не подходит, при быстром выходе из зоны пороговые значения оказываются не задеты, кнопка остается видимой

Rectangle {
  id: rectangle
  x: 334
  y: 255
  width: 200
  height: 200
  color: "#ffffff"
  border.width: 3

  MouseArea {
    id: mouseArea1
    anchors.fill: parent
    propagateComposedEvents: true
    hoverEnabled: true
    /*onExited: button3.visible=false
    onEntered: button3.visible=true*/
    onMouseYChanged: {
      if(mouseY>=2 && mouseY<parent.height)
       {console.log(mouseY+" vis");button3.visible=true}
      if(mouseY<3 || mouseY>parent.height-5)
       {console.log(mouseY+" invis");button3.visible=false}
    }
  }

  Button {
    id: button3
    x: 70
    y: 84
    text: qsTr("Button")
    visible: false
  }
}

Ответы (2 шт):

Автор решения: Alexander Chernin

Вот так нормально работает. Обратите внимание на вывод в консоль; при входе - одно сообщение "Entered", вы выходе - "Leaved", никаких "морганий". То есть если есть какие-либо "моргания" кнопки, то причина этого кроется в чем-то другом.

Я сделал простое окно, в которое просто добавил ваш MouseArea:

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

    Rectangle {
      id: rectangle
      x: 334
      y: 255
      width: 200
      height: 200
      color: "#ffffff"
      border.width: 3

      MouseArea {
        id: mouseArea1
        anchors.fill: parent
        propagateComposedEvents: true
        hoverEnabled: true
        onEntered: {
            console.log("Entered");
            button3.visible = true;
        }
        onExited: {
            console.log("Leaved");
            button3.visible = false;
        }
      }

      Button {
        id: button3
        x: 70
        y: 84
        text: qsTr("Button")
        visible: false
      }
    }
}
→ Ссылка
Автор решения: konstantin butakov
Rectangle {
    id: rectangle
    x: 334
    y: 255
    width: 200
    height: 200
    color: "#ffffff"
    border.width: 3

    MouseArea {
        id: mouseArea1
        anchors.fill: parent
        propagateComposedEvents: true
        hoverEnabled: true

        Button {
            id: button3
            x: 70
            y: 84
            text: qsTr("Button")
            visible: mouseArea1.containsMouse
        }
    }
}
→ Ссылка