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