多级窗口可以通过动态组件进行实现,也可以通过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 640 height: 480 title: qsTr("Hello World") property var child; Button{ id: test; 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; 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; 200; height: 200; signal gotoPre(); Column{ Rectangle{ 100; height: 100; color:"red"; } Button{ 70; height: 30; text: "回到上一页" onClicked:{ gotoPre(); } } } function open() { testcomp.visible = true; } function close() { testcomp.visible = false; } }