我应该如何启动QML文件?

时间:2018-02-20 15:45:23

标签: qt qml

我有4个QML文件:MainMenu.qmlAppArea.qmlResult.qmlmain.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}}可能会更改为Repeater1, 2, 3, 4...上有一个按钮,当我点击该按钮时,我想打开AppArea.qml作为全屏新窗口,如MainMenu.qml

实际上你可以认为基本:我的应用程序是这样的游戏:

mainmenu.png App_Area.png Resulton_App_Area.png

我应该如何选择这些工作?

1 个答案:

答案 0 :(得分:1)

除了mentioned post之外,在您的情况下,您使用的是qml文件中的component,因此您需要先加载componentmain.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

             }
         }
    }