多級窗口可以通過動態組件進行實現,也可以通過loader加載。
然而,在此要注意窗口顯示、隱藏的順序;
1、當窗口層級為主窗口 - 子窗口A --- 子窗口B;
這種模式, A是B的父窗口,那么在進行顯示時,必須先顯示A,在顯示B, 同時,在隱藏時,要先隱藏B,在隱藏A,如果先隱藏了A,再隱藏B,就會出現主窗口自動最小化到
狀態欄的現象:
如果將主窗口傳入A內,在動態創建B,同時指定B的父窗口為主窗口,那么在子窗口A關閉,而B隱藏的狀態時,會出現B突然又顯示出來了,而A正常關閉;
正確的做法是將A,B作為同級窗口,同時以主窗口作為父窗口,通過信號進行控制兩個窗口的相關顯示、隱藏關系;
main.qml
import QtQuick 2.9 import QtQuick.Window 2.2 import QtQuick.Controls 1.3 Window { id: windows; visible: true width: 640 height: 480 title: qsTr("Hello World") property var child; Button{ id: test; width: 70; height: 30; onClicked: test1.open(); } Test1{ id: test1; visible: false; onShowTest:{ child.open(); this.close(); } } Connections{ target: child; onGotoPre:{ test1.open(); child.close(); } } Component.onCompleted:{ var comp = Qt.createComponent("qrc:/TestComp.qml"); if( comp.status === Component.Ready) { child = comp.createObject(windows); } } }
Test1.qml
import QtQuick 2.0 import QtQuick.Window 2.2 import QtQuick.Controls 1.3 Window { id: test; width: 300; height: 200; visible:false; signal showTest(); property var parentDlg; Button{ id: testButton; text:"click me"; onClicked:{ showTest(); } } function open() { test.visible = true; } function close() { test.visible = false; } }
TestComp.qml
import QtQuick 2.0 import QtQuick.Window 2.2 import QtQuick.Controls 1.3 Window { id: testcomp; width: 200; height: 200; signal gotoPre(); Column{ Rectangle{ width: 100; height: 100; color:"red"; } Button{ width: 70; height: 30; text: "回到上一頁" onClicked:{ gotoPre(); } } } function open() { testcomp.visible = true; } function close() { testcomp.visible = false; } }