我有一个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()
}
}
}