Подтвердить что ты не робот

Как я могу создать новое окно из 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.

4b9b3361

Ответ 1

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

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

Ответ 2

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