QML弹出窗口:知道它是如何关闭的



我有一个QML弹出窗口,我可以通过单击它外部或按escape来关闭它(因此默认关闭策略很好(。但是,如果使用 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 抱怨它不是一个项目。

您可以

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

相关内容

  • 没有找到相关文章

最新更新