多級窗口可以通過動態組件進行實現,也可以通過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;
}
}
