20

有没有办法创建一个全新的窗口实例,作为 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.

4

2 回答 2

45

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

main.qml

import QtQuick 2.3
import QtQuick.Controls 1.2

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

    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.")
    }
}
于 2014-06-25T12:24:34.423 回答
2

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

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

于 2011-11-30T15:18:47.900 回答