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

在 QML 中设置子项属性的正确方法

QML Popup,屏蔽其他控件,使除了Popup控件的其他控件不再响应

WPF中的Popup控件,遇到个问题,求助

QML Popup Overlay.modal 过渡不起作用

QT Quick QML 实例之 Popup 弹出界面