如何在qml中关闭单个屏幕/页面?

时间:2014-12-18 17:02:04

标签: qt qml

Qt.quit()退出应用程序,但我只想退出当前屏幕,这应该让我回到父屏幕。我该怎么做?

Rectangle {
    id: page
    visible: true
    width: 360
    height: 480

    Button {
        width: 150
        height: 50
        text: "Parent"

        onClicked: {
            console.log("Parent pressed")

            //? how to exit this screen here?
        }
    }
}

以下是Folibis回答后的新代码。

import QtQuick 2.3
import QtQuick.Window 2.2

Window {
    visible: true
    width: 360
    height: 360

    property bool isClose: false

    MouseArea {
        anchors.fill: parent
        onClicked: {
            if(isClose)
                 Qt.quit();
             else
                 Page2.show() //subWindow.show();
             isClose = true;
        }
    }

    Text {
        text: qsTr("Hello World")
        anchors.centerIn: parent
    }
}

Window位于新的qml文件中,现在名为Page2.qml

import QtQuick 2.0
import QtQuick.Window 2.2

Window {
    id: subWindow
    visible: false
    width: 400
    height: 400
    flags: Qt.Dialog
    Text {
        anchors.centerIn: parent
        text: "Click me to close the subwindow"
    }
    MouseArea {
        anchors.fill: parent
        onClicked: subWindow.close();
    }
}

问题是如何从main.qml调用Page2.qml?

2 个答案:

答案 0 :(得分:1)

我认为在应用程序中组织窗口的正确方法是使用适当的组件。 Rectangle作为窗口没有用,也没有语义。使用Window作为对话框和辅助窗口,使用ApplicationWindow作为主窗口。作为奖励,您拥有管理它的所有有用功能。

示例:

ApplicationWindow {
    width: 800
    height: 600
    id: mainWindow
    property bool isClose: false
    Text {
        anchors.centerIn: parent
        text: isClose ? "Click me to close the main window" : "Click me to show subwindow"
    }
    MouseArea {
        anchors.fill: parent
        onClicked: {
            if(isClose)
                Qt.quit();
            else
                subWindow.show();
            isClose = true;
        }
    }
    Window {
        id: subWindow
        visible: false
        width: 400
        height: 400
        flags: Qt.Dialog
        Text {
            anchors.centerIn: parent
            text: "Click me to close the subwindow"
        }
        MouseArea {
            anchors.fill: parent
            onClicked: subWindow.close();
        }
    }
}

答案 1 :(得分:0)

实例化新窗口

var component = Qt.createComponent("Page2.qml");
if (component.status == Component.Ready) {
    var subWindow = component.createObject(mainWindow);
    conn.target = subWindow;
    subWindow.show();
}

Connections {
    id: conn
    onVisibleChanged: {
        if(visible)
            console.log("window closed");
    }
}

作为奖励 - 触发窗口关闭事件的代码