Pregunta

¿Hay alguna manera de crear una instancia de ventana completamente nueva, como ventana infantil de la ventana QML principal en una aplicación QMLAP?

// 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);
    }
}

Estoy tratando de evitar escribir un Q_OBJECT clase solo para instanciar la nueva ventana dentro de un nuevo QmlApplicationViewer.

¿Fue útil?

Solución

No hay forma de crear ventanas de nivel superior utilizando solo la funcionalidad QML incorporada.

Sin embargo, hay un proyecto en QT Labs llamado Componentes de escritorio, que entre otras cosas contiene un Componente de ventana, que le permite crear nuevas ventanas de nivel superior.

Otros consejos

Puede hacerlo usando Qt.CreateComponent. Ejemplo (usando 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()
        }
    }
}

Niño. 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.")
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top