Как создать новое окно из QML?

есть ли способ создать совершенно новый экземпляр окна, как дочернее окно главного окна 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 ответов


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

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


Вы можете сделать это с помощью 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()
        }
    }
}

ребенок.в 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.")
    }
}