有没有办法递归创建QML组件?我正在实现一个聊天,用户可以将消息重新发送给另一个用户,因此我希望看到包含另一个消息的消息组件。像这样:
>my message
>>forwarded message1
>>>forwarded message1.2
>>forwarded message2
但我不知道此类转发消息的最大深度,因此我不能仅为每种情况创建原型。
现在我使用Loader
组件递归加载组件,但有2个错误。首先,它非常慢,所以如果我在与很多转发消息的聊天中有100条消息,则加载页面需要2秒钟。
其次,滚动条行为很奇怪 - Loader
组件(据我所知)在隐藏时卸载我的组件,因此当我滚动整体height
更改时。
也许有人知道以递归方式创建项目的好方法,或者有关如何使代码部分更快地运行并且没有滚动错误的一些想法?
到目前为止,我只有一个想法 - 将该组件移动到C ++代码,在那里我可以创建没有Loader
组件的项目。
答案 0 :(得分:0)
即使代码片段有所帮助,如果我理解正确,您也会尝试按需动态创建对象,因为您不知道自己需要多少对象。
Here指向文档的链接。
您可以通过方法Qt.createComponent
和Component.createObject
来实现这一目标。
它遵循从上面链接的文档中复制的示例:
var component = Qt.createComponent("Button.qml");
if (component.status == Component.Ready) {
component.createObject(parent, {"x": 100, "y": 100});
}
不管怎样,不要依赖上面的代码。我强烈建议阅读文档,因为这个例子真的很简单。
无论如何,如果我必须做类似的事情,我不会通过上述功能反复产生物体。性能和内存占用都可能受此影响。相反,尝试从更合适和众所周知的数据结构中获得最佳效果,例如循环缓冲区:您可以预先分配它们,使代码易于理解和维护,同时降低运行时的风险。