无法设置动态创建的QML组件的父级

时间:2016-03-27 01:48:18

标签: qt qml

我在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.widthrootWindow.width的值确实不同,这在显示窗口时也很明显。但是,rootWindow被设置为createObject调用中的父级。所以,我不确定那里发生了什么,但我想知道这是否是动态创建组件父项的正确方法。

1 个答案:

答案 0 :(得分:1)

尝试在代码中添加console.log(parent)。你会看到像qml: QQuickRootItem(0x1e3e4e0)这样的东西。如果您查看Qt文档,您会发现Qt documentation返回Item但Windows不是Item后代而是QQuickWindow。同样来自文档:

  

QQuickWindow总是有一个隐形根项......

因此,在您的情况下,parentrootWindow是不同的对象。

P.S。虽然component.createObject返回错误,但代码中的动态对象创建可能会产生错误,因为Qt.createComponent将被执行。只需复制{{3}}。

中的代码即可