¿Cómo puedo crear una nueva ventana desde QML?
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
.
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