如何在QML中创建新窗口?

时间:2011-11-30 14:56:20

标签: window qml qobject

有没有办法创建一个全新的窗口实例,作为QmlApplication中主QML窗口的子窗口?

// ChildWindow.qml
Rectangle {
    id: childWindow
    width: 100
    height: 100
    // stuff
}

// main.qml
Rectangle {
    id: window
    width: 1000
    height: 600

    MouseArea {
        anchors.fill: parent
        onClicked: createAWindow(childWindow);
    }
}

我正在努力避免编写Q_OBJECT课程,只是为了在新的QmlApplicationViewer内实现新窗口。

2 个答案:

答案 0 :(得分:29)

您可以使用Qt.createComponent来完成。示例(使用Qt 5.3):

<强> main.qml

import QtQuick 2.3
import QtQuick.Controls 1.2

ApplicationWindow {
    id: root
    width: 200; height: 200

    Button {
        anchors.centerIn: parent
        text: qsTr("Click me")

        onClicked: {
            var component = Qt.createComponent("Child.qml")
            var window    = component.createObject(root)
            window.show()
        }
    }
}

<强> Child.qml

import QtQuick 2.3
import QtQuick.Controls 1.2

ApplicationWindow {
    id: root
    width: 100; height: 100

    Text {
        anchors.centerIn: parent
        text: qsTr("Hello World.")
    }
}

答案 1 :(得分:1)

无法仅使用内置QML功能创建顶级窗口。

然而,Qt Labs上有一个名为Desktop Components的项目,其中包含一个Window component,允许您创建新的顶级窗口。