Вопрос

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

Это было полезно?

Решение

Невозможно создать окна верхнего уровня, используя только встроенные функции 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
    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.")
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top