QML Popup: know how it was closed

Davidbrcz

I've a QML Popup that I can close by clicking outside of it or by pressing escape (hence default closing policy is fine). However, I need to do different things if the popup is closed with escape (cancel a few things) or by clicking outside (commit the changes). I can't use Dialog, we don't want explicit buttons.

How can I reliably detect it ? So far, I've used a MouseArea to detect if the mouse is hover the Popup when it closes. The only issue is that is doesn't work if the user presses escape and it's mouse is outside the popup.

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

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

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

I tried to add

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

to the popup, but then QML complains it's not an item.

luffy

you could change the default close policy and handle the Esc key press separately. The code will then look something like this:

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

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事