完成后销毁 QT QML 窗口

Posted

技术标签:

【中文标题】完成后销毁 QT QML 窗口【英文标题】:Destroy QT QML windows once done 【发布时间】:2018-12-08 15:37:25 【问题描述】:

QT QML 的新手,很抱歉,如果它只是一个非常简单的问题。

我有一段简单的代码来演示 WebEngine Qt Quick 示例。

/* runtime.qml*/
import QtQuick 2.1
import QtQuick.Controls 1.1
import QtWebEngine 1.1

ApplicationWindow 
    width: 1080
    height: 1488
    visible: true
    flags: Qt.WindowFullScreen | Qt.FramelessWindowHint
    WebEngineView 
            url: "http://www.qt.io"
            anchors.fill: parent
    

它只是显示一个网页并由以下脚本调用:

#!/bin/sh
exec /usr/bin/qt5/qmlscene "$1" runtime.qml

当点击放置在某个“其他窗口”上的小部件时触发此脚本

现在,我希望当有人返回到触发脚本的“其他窗口”时销毁由 runtime.qml 创建的表面。

【问题讨论】:

您必须弄清楚这些其他窗口是什么。 Window 具有 close() 方法,因此您可以在失去焦点或其他情况时关闭它。 【参考方案1】:

Qt.quit() 可以解决问题:

MouseArea
                  anchors.fill: parent
                  onClicked: 
                         Qt.quit()
                  
         

您的问题还不够清楚,您可能也需要Timer,您是使用Loader 来处理runtime.qml 还是加载它? 或者您可能希望查看可以打开或关闭的Popup,而不是使用 Windows。

【讨论】:

【参考方案2】:

您可以使用关闭按钮来关闭窗口,如下所示:

    Image 
        id: quitButton
        width: 50
        height: 50
        fillMode: Image.PreserveAspectFit
        source: mouseAreaQuitButton.containsMouse ?
                    "../images/titleBar/quit_hover.png" :
                    "../images/titleBar/quit.png"
        MouseArea 
            id: mouseAreaQuitButton
            anchors.fill: parent
            hoverEnabled: true
            onClicked: Qt.quit()
        
    

【讨论】:

以上是关于完成后销毁 QT QML 窗口的主要内容,如果未能解决你的问题,请参考以下文章

Qt 销毁模态对话框

Qt基于Qml文本字段编辑完成事件处理

如何在 QML 中的同一事件之后创建/销毁动态对象?

Duilib中创建子窗口后,子窗口销毁的问题

Qt 正确的显示窗口

Qt 正确的显示窗口