如何从普通QML窗口显示QtQuick UI文件集(ui.qml和.qml)?
要从我的父窗口类显示其他QML窗口,调用大致为:
var component = Qt.createComponent("SubWindow.qml")
var window = component.createObject(window)
window.show()
我试过调用QtQuickUISubwindow.ui.qml和QtQuickUISubwindow.qml,但都不起作用。
QtQuickUI文件不是子窗口吗?
答案 0 :(得分:1)
Window
和ApplicationWindow
不属于Item
类型(或QQuickItem
)。但是,这需要作为.ui.qml
文件中的根项目放置为stated in the documentation:
不支持以下功能:
- [...]
- 不是从QQuickItem或Item
派生的根项目
所以答案是:
不,您不能将QtQuickUI文件用作窗口或子窗口。
然而,您可以在子窗口中轻松使用
// main.qml
Window {
id: root
width: 800
height: 600
visible: true
Loader { // creates my sub window without JS
id: winLoader
active: false // Change to create the window.
sourceComponent: Window {
width: srcLoader.item ? srcLoader.item.width : 0
height: srcLoader.item ? srcLoader.item.height : 0
visible: srcLoader.item
Loader {
id: srcLoader
source: "QtQuickUISubwindow.ui.qml" // Your ui.qml-file *here*
active: true
}
onClosing: winLoader.active = false
}
}
Button {
text: "Show sub window!"
onClicked: winLoader.active = true
}
}
此代码尚未经过我的测试。有一次我可以访问Qt机器后,我可能会这样做。如何使用转发器和ListModel
初始化多个窗口,您可以在此处找到:https://stackoverflow.com/a/47018205/2056452
您可以将source
的{{1}}传递给模型,如果要打开多个不同的窗口,可以从那里读取它。
您可以修改srcLoader
- 文件,并添加适当大小的QtQuickUISubwindow.qml
或Window
作为根元素。然后你可以像以前一样使用JS创建所有内容 - 并希望垃圾收集器能很好地运行。