我有4个QML文件:MainMenu.qml
,AppArea.qml
,Result.qml
和main.qml
。
当我的应用开始时,我希望首页显示MainMenu.qml
全屏。有一个按钮(在MainMenu.qml
上)以启动AppArea.qml
。当我单击该按钮时,我想以AppArea.qml
作为全屏新窗口启动。
有一个按钮(在AppArea.qml
上),当我点击该按钮时,我想显示Result.qml
但我希望在Result.qml
上看到AppArea.qml
,我的意思是当Result.qml
出来时,AppArea.qml
不会消失,Result.qml
会出现在AppArea.qml
上。
Result.qml
上有一个按钮。当我点击该按钮时,Repeater
中的AppArea.qml
会重新生成,因为model
的{{1}}可能会更改为Repeater
。 1, 2, 3, 4...
上有一个按钮,当我点击该按钮时,我想打开AppArea.qml
作为全屏新窗口,如MainMenu.qml
。
实际上你可以认为基本:我的应用程序是这样的游戏:
我应该如何选择这些工作?
答案 0 :(得分:1)
除了mentioned post之外,在您的情况下,您使用的是qml文件中的component
,因此您需要先加载component
,main.qml
可以像这样:
import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Controls 2.2
Window {
id: mainWindow
title: "Main window"
visible: true
flags: Qt.Dialog
modality: Qt.ApplicationModal
Loader{
id: mainMenuLoader
}
Component.onCompleted: {
mainMenuLoader.source="mainMenu.qml"
var mainMenu = mainMenuLoader.item.createObject(mainWindow);
mainWindow.hide()
}
}
,您的mainMenu.qml
可能如下所示:
import QtQuick 2.9
import QtQuick.Window 2.3
import QtQuick.Controls 2.2
Component {
id: mainMenu
Window {
id:mmenu
title: "Main Menu"
width: 600
height: 600
visible: true
flags: Qt.Dialog
modality: Qt.ApplicationModal
Loader{
id: appAreaLoader
}
Text {
text: "This is mainMenu"
}
Button{
id: loadAppArea
anchors.centerIn: parent
text: "Start Game"
onClicked: {
appAreaLoader.source="appArea.qml"
var appArea = appAreaLoader.item.createObject(mainMenu);
hide()
}
}
}
}
你需要对连续的窗口做同样的事情......等等。
对于result
,您需要使用MouseArea
:
appArea.qml:
Component {
id: appMenu
Window {
id:appMenuWindow
title: "App Menu"
width: 600
height: 600
visible: true
flags: Qt.Dialog
modality: Qt.ApplicationModal
Loader{
id:anotherLoader
visible: true
anchors.left: appMenuText.left
anchors.top: appMenuText.bottom
width: parent.width/3
height: parent.height/3
}
Text {
id: appMenuText
text: "This is App Area"
anchors.centerIn: parent
}
Button{
id: loadResult
text: "Show Result"
onClicked: {
anotherLoader.source = "result.qml"
anotherLoader.visible=true
}
}
Button{
anchors.right: parent.right
id: loadMainMenu
text: "Open main Menu"
onClicked: {
hide()
//mmenu.show()
anotherLoader.setSource("main.qml")
}
}
}
}
result.qml:
Rectangle{
color: "green"
Text {
anchors.centerIn: parent
id: resultxt
text: qsTr("This is result, Click to close")
}
MouseArea {
anchors.fill: parent
onClicked: { anotherLoader.visible = false
}
}
}