Как я могу создать новое окно из QML? - PullRequest
14 голосов
/ 30 ноября 2011

Есть ли способ создать полностью новый экземпляр окна, как дочернее окно основного окна QML в приложении QmlApplication?

// 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 ]

31 голосов
/ 25 июня 2014

Вы можете сделать это с помощью 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 голос
/ 30 ноября 2011

Нет способа создать окна верхнего уровня, используя только встроенную функциональность QML.

Однако в Qt Labs есть проект под названием Desktop Components , который, среди прочего, содержит Компонент окна , который позволяет создавать новые окна верхнего уровня.

...