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
}
}
}