Qt5 QtQuick 2.0(Qt快速应用程序)在一个窗口中切换视图(qml文件)

时间:2014-04-07 13:35:20

标签: c++ qt qml qt-quick

在传统的Qt(QWidget)中,我有一个QMainWindow和一些动态创建的QWidgets与内容,我改变它们在主窗口中看到一个。当我有几个qml文件并且我希望能够在单击按钮时切换它们时有什么方法。

1 个答案:

答案 0 :(得分:0)

至少有3种方法可以解决此问题:

  1. 您可以使用为此目的准备的组件StackView。关键是您将一次创建2个组件,并且可以通过单击按钮来更改它们。

示例:

import QtQuick 2.12
import QtQuick.Controls 2.5

ApplicationWindow {
    id: window
    visible: true
    width: 640
    height: 480
    title: qsTr("Stack")

    header: ToolBar {
        contentHeight: toolButton.implicitHeight

        ToolButton {
            id: toolButton
            text: stackView.depth > 1 ? "\u25C0" : "\u2630"
            font.pixelSize: Qt.application.font.pixelSize * 1.6
            onClicked: {
                if (stackView.depth > 1) {
                    stackView.pop()
                } else {
                    drawer.open()
                }
            }
        }

        Label {
            text: stackView.currentItem.title
            anchors.centerIn: parent
        }
    }

    Drawer {
        id: drawer
        width: window.width * 0.66
        height: window.height

        Column {
            anchors.fill: parent

            ItemDelegate {
                text: qsTr("Page 1")
                width: parent.width
                onClicked: {
                    stackView.push("Page1Form.qml")
                    drawer.close()
                }
            }
            ItemDelegate {
                text: qsTr("Page 2")
                width: parent.width
                onClicked: {
                    stackView.push("Page2Form.qml")
                    drawer.close()
                }
            }
        }
    }

    StackView {
        id: stackView
        initialItem: "HomeForm.qml"
        anchors.fill: parent
    }
}
  1. 在此处使用Loader会在执行过程中动态加载文件,此方法的缺点是如果经​​常切换会很费时间。

示例:

import QtQuick 2.0

Item {
    width: 200; height: 200

    Loader { id: pageLoader }

    MouseArea {
        anchors.fill: parent
        onClicked: pageLoader.source = "Page1.qml"
    }
}
  1. 您可以用C ++创建一个类,该类将以一个空的qml形式提供给已初始化的QML对象。因此,将单个组件放置到库中并将其用作插件(use qqmlcomponent)。