我有一个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抱怨这不是项目。
答案 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()
}
}
}