2014-12-18 2 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 
    } 
} 

지금

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를 호출하는 방법입니다 Page2.qml라는 이름의 새 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을 사용하십시오. 보너스로 모든 관리 기능이 있습니다. 보너스로 새로운 창

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

을 인스턴스화

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

하지만 ID가 작동하지 않습니다. 다른 page2.qml 파일에'Window' 모듈을 정의했습니다. 어떻게 보여줄 수 있습니까? – zar

관련 문제