2014-12-18 8 views
0

Qt.quit(), который выходит из приложения, но я просто хочу выйти из текущего экрана, который должен позволить мне вернуться к родительскому экрану. Как мне это сделать?Как закрыть один экран/страницу в qml?

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 
    } 
} 

Окно в новом файле 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(); 
    } 
} 

Проблема заключается в том, как я называю Page2.qml от main.qml?

+0

Может быть, просто 'page.visible = false'? – Chernobyl

+0

Это будет работать только в том случае, если 'rectangle' находится в одном файле, я хочу вернуться из другого qml-файла. – zar

+2

Посмотрите в StackView: https://qt-project.org/doc/qt-5-snapshot/qml-qtquick-controls-stackview.html – MrEricSir

ответ

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(); 
     } 
    } 
} 
+0

Могу ли я переместить subWindow в новый qml-файл? Я сделал это для 'Page2.qml' и, чем в вышеперечисленном' Page2.show() ', но он не работает. – zar

+0

Конечно, вы можете переместить окно в любое место. Покажите код при создании и закрытии окна, возможно, вы пропустите что-то – folibis

+0

Но идентификатор не работает. Я определил 'Window'module в другом файле page2.qml. Как это показать? – zar

0

Instancing новое окно

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"); 
    } 
} 

в качестве бонуса - код, чтобы вызвать закрытие окна событие

Смежные вопросы