QML Popup:知道它是如何关闭的
Posted
技术标签:
【中文标题】QML Popup:知道它是如何关闭的【英文标题】:QML Popup: know how it was closed 【发布时间】:2019-04-04 07:24:05 【问题描述】:我有一个 QML 弹出窗口,我可以通过在其外部单击或按退出键来关闭它(因此默认关闭策略很好)。 但是,如果弹出窗口通过转义(取消一些事情)或通过单击外部(提交更改)关闭,我需要做不同的事情。我不能使用 Dialog,我们不想要显式按钮。
我怎样才能可靠地检测到它?到目前为止,我已经使用 MouseArea 来检测鼠标在弹出窗口关闭时是否悬停。唯一的问题是,如果用户按下转义键并且鼠标位于弹出窗口之外,则该功能不起作用。
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】:您可以更改默认关闭策略并单独处理 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()
【讨论】:
谢谢!我不知道这种快捷方式类型! 在@luffy 的示例中,您需要确保在尝试关闭它之前有一个弹出窗口,因为可以随时激活此快捷方式。即使没有捷径。在这种情况下,您会收到警告。if (popup) popup.close()
以上是关于QML Popup:知道它是如何关闭的的主要内容,如果未能解决你的问题,请参考以下文章
QML Popup,屏蔽其他控件,使除了Popup控件的其他控件不再响应