QML Popup:知道如何关闭

时间:2019-04-04 07:24:06

标签: qt qml qt5

我有一个QML弹出窗口,可以通过在其外部单击或按Escape键来关闭(因此默认关闭策略是可以的)。 但是,如果弹出窗口是通过转义(取消一些操作)或通过单击外部(提交更改)关闭的,则我需要执行其他操作。我不能使用Dialog,我们不需要显式按钮。

如何可靠地检测到它?到目前为止,我已经使用MouseArea来检测鼠标关闭时是否将鼠标悬停在Popup上。唯一的问题是,如果用户按下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 个答案:

答案 0 :(得分:4)

您可以更改默认的关闭策略并单独处理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()
        }
    }
}