Qml组件递归

时间:2015-06-18 23:22:21

标签: javascript qt qml qtquick2

有没有办法递归创建QML组件?我正在实现一个聊天,用户可以将消息重新发送给另一个用户,因此我希望看到包含另一个消息的消息组件。像这样:

>my message
>>forwarded message1
>>>forwarded message1.2
>>forwarded message2

但我不知道此类转发消息的最大深度,因此我不能仅为每种情况创建原型。 现在我使用Loader组件递归加载组件,但有2个错误。首先,它非常慢,所以如果我在与很多转发消息的聊天中有100条消息,则加载页面需要2秒钟。 其次,滚动条行为很奇怪 - Loader组件(据我所知)在隐藏时卸载我的组件,因此当我滚动整体height更改时。 也许有人知道以递归方式创建项目的好方法,或者有关如何使代码部分更快地运行并且没有滚动错误的一些想法? 到目前为止,我只有一个想法 - 将该组件移动到C ++代码,在那里我可以创建没有Loader组件的项目。

1 个答案:

答案 0 :(得分:0)

即使代码片段有所帮助,如果我理解正确,您也会尝试按需动态创建对象,因为您不知道自己需要多少对象。

Here指向文档的链接。 您可以通过方法Qt.createComponentComponent.createObject来实现这一目标。

它遵循从上面链接的文档中复制的示例:

var component = Qt.createComponent("Button.qml");
if (component.status == Component.Ready) {
    component.createObject(parent, {"x": 100, "y": 100});
}

不管怎样,不要依赖上面的代码。我强烈建议阅读文档,因为这个例子真的很简单。

无论如何,如果我必须做类似的事情,我不会通过上述功能反复产生物体。性能和内存占用都可能受此影响。相反,尝试从更合适和众所周知的数据结构中获得最佳效果,例如循环缓冲区:您可以预先分配它们,使代码易于理解和维护,同时降低运行时的风险。