QML Popup: знать, как это было закрыто - PullRequest
1 голос
/ 04 апреля 2019

У меня есть всплывающее окно QML, которое я могу закрыть, щелкнув за его пределами или нажав клавишу escape (следовательно, политика закрытия по умолчанию подходит).Однако мне нужно делать разные вещи, если всплывающее окно закрывается с помощью escape (отменить несколько вещей) или щелкнуть снаружи (зафиксировать изменения).Я не могу использовать Диалог, нам не нужны явные кнопки.

Как я могу надежно его обнаружить?До сих пор я использовал MouseArea для определения, когда мышь закрывает всплывающее окно при его закрытии.Единственная проблема заключается в том, что он не работает, если пользователь нажимает escape, а его мышь находится вне всплывающего окна.

Popup
    {
        onAboutToHide: {
            if(!ma.containsMouse)
            {

            }
        }
        contentItem: Text{
               text: "hello"
        }

        MouseArea{
            z:-1
            id: ma
            anchors.fill: parent
            hoverEnabled:true
        }
  }

Я пытался добавить

Keys.onEscapePressed:{
 console.log('esc !')
}

во всплывающее окно, нотогда QML жалуется, что это не предмет.

1 Ответ

4 голосов
/ 04 апреля 2019

Вы можете изменить политику закрытия по умолчанию и обрабатывать нажатие клавиши Esc отдельно.Код будет выглядеть примерно так:

Popup {
    id: popup
    onAboutToHide: {
        if(!ma.containsMouse) {
            console.log("click outside: commit the changes")
        }
    }
    contentItem: Text {
        text: "hello"
    }

    MouseArea {
        z:-1
        id: ma
        anchors.fill: parent
        hoverEnabled:true
    }

    closePolicy: Popup.CloseOnPressOutside

    Shortcut {
        sequence: "Esc"
        onActivated: {
            console.log("Esc: cancel a few things")
            popup.close()
        }
    }
}
...