我在QML中创建动态组件如下:
var component = Qt.createComponent("PlayerWindow.qml")
if (component.status != component.errorString())
console.log(component.errorString())
var playerWin = component.createObject(rootWindow);
这里rootWindow
是我的主要应用程序窗口。现在,PlayerWindow
非常简单:
Window {
id: playerWindow
width: parent.width
height: parent.height
Component.onCompleted: {
console.log(parent.width)
console.log(rootWindow.height)
}
}
问题是parent.width
和rootWindow.width
的值确实不同,这在显示窗口时也很明显。但是,rootWindow
被设置为createObject
调用中的父级。所以,我不确定那里发生了什么,但我想知道这是否是动态创建组件父项的正确方法。
答案 0 :(得分:1)
尝试在代码中添加console.log(parent)
。你会看到像qml: QQuickRootItem(0x1e3e4e0)
这样的东西。如果您查看Qt文档,您会发现Qt documentation返回Item
但Windows不是Item
后代而是QQuickWindow
。同样来自文档:
QQuickWindow总是有一个隐形根项......
因此,在您的情况下,parent
和rootWindow
是不同的对象。
P.S。虽然component.createObject
返回错误,但代码中的动态对象创建可能会产生错误,因为Qt.createComponent
将被执行。只需复制{{3}}。