Область мыши в qml (onEntered, onExited, onReleased)

#qml

#qml

Вопрос:

У меня есть одна кнопка. Я хочу изменить состояния кнопки, например:

Изображение по умолчанию — black . onEntered я хочу изображение как blue , onExited я хочу изображение как black (равное состоянию по умолчанию), и onReleased я хочу изображение как blue (равное состоянию onEntered).

Примечание: onRelease должно быть активным внутри кнопки, а вне кнопки onRelease не должно работать.

Как этого можно достичь?

Область мыши выглядит следующим образом:

 MouseArea
{
    anchors.fill: firstImage(parent)
    onEntered:
    {
        firstImage.source = "blue.img"
    }
    onExited:
    {
        firstImage.source = "black.img"
    }
    onReleased:
    {
        firstImage.source = "blue.img"
    }
}
  

Проблема, с которой я сталкиваюсь, заключается в:
onRelease активна за пределами кнопки.
Я хочу onRelease быть активным при отпускании нажатия внутри кнопки.

Комментарии:

1. Что anchors.fill: firstImage(parent) должно означать? Если вы пытаетесь получить родительский элемент firstImage , вы должны сделать firstImage.parent

Ответ №1:

Вы можете использовать тот факт, что вы можете присвоить каждому объекту в qml дополнительное пользовательское свойство.

Я придумал следующее, что, похоже, соответствует вашему запросу, однако я вижу недостаток, потому что, когда вы «вводите» и нажимаете, кнопка переходит в состояние «введено», поэтому в состоянии «отпущено» разницы нет, и после выхода из области мыши она снова переходит в состояние «выход».

Обратите внимание, я не копировал материал firstImage.source, но вы можете легко адаптировать этот пример к вашей ситуации

 import QtQuick.Controls 2.4

Button {

    hoverEnabled: true

    property bool touched : false

    onHoveredChanged: touched = hovered
    onReleased: touched = true

    text: touched ? "touched" : "not touched"
}
  

hoverEnabled Необходимо установить

Комментарии:

1. То, что вы сделали, правильно. Я попробовал то же самое с использованием изображений, это сработало. Но я хочу еще одну функцию, т. Е. onclicked внутри области мыши, я также хочу показывать состояние onEntered и onExited. Пожалуйста, попробуйте этот код (используя изображения).

2. Окно { идентификатор: строка свойства mainwindow img_src: строка свойства «abc.png» img; Кнопка {ширина: 100; высота: 50; Наведен: false onHoveredChanged: img_src = наведен на выпущенное: img_src = «HDX_Caps_Enter_Selected.png» Изображение {идентификатор: имя; источник: img_src ? img_src : img anchors.fill: родительский} Область мыши {anchors.fill: родительский onEntered:{name.source = «HDX_Caps_Enter_Selected.png»} onExited:{ name.source = abc.png» }}}}

3. Мой пример также работает при нажатии кнопки. Так, может быть, я неправильно понял? Также ваш пример в приведенном выше комментарии содержит некоторые ошибки.