【问题标题】:QML Popup: know how it was closedQML Popup:知道它是如何关闭的
【发布时间】: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 抱怨它不是一个项目。

【问题讨论】:

    标签: qt qml qt5


    【解决方案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()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-03
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    • 2012-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多