Qt QML:使用网格模拟GridView/ListView缓存缓冲区
我有一个非常复杂的QML视图,它基本上是一个Qt QML:使用网格模拟GridView/ListView缓存缓冲区,qt,gridview,qml,Qt,Gridview,Qml,我有一个非常复杂的QML视图,它基本上是一个GridView,但是没有使用默认的GridView,因为它不支持节 出于这个原因,我使用了Flickable+Grids和Repeater的组合来填充多个节头+一个卷轴下的网格 现在,由于cacheBuffer不可用,并且在最后一节中,视图+无限模型的视觉委托非常繁重(用户进一步滚动时会获取该委托),当您不断滚动时,我们的内存消耗会疯狂增加。我最好的猜测是,每个实例化的QML委托基本上永远保存在内存中 我正在寻找一种解决方案,您可以模拟GridVie
GridView
,但是没有使用默认的GridView
,因为它不支持节
出于这个原因,我使用了Flickable
+Grid
s和Repeater
的组合来填充多个节头+一个卷轴下的网格
现在,由于cacheBuffer
不可用,并且在最后一节中,视图+无限模型的视觉委托非常繁重(用户进一步滚动时会获取该委托),当您不断滚动时,我们的内存消耗会疯狂增加。我最好的猜测是,每个实例化的QML委托基本上永远保存在内存中
我正在寻找一种解决方案,您可以模拟GridView
的cacheBuffer
属性,将其应用于简单Grid
并卸载远离可见滚动区域的代理
目前,我正在考虑使用Loader
加载每个代理,并跟踪可见滚动区域中/附近的项目,以便他们的Loader
可以加载/卸载其内容
如果您有任何建议,我们将不胜感激。您解决了吗?我想看一张你所拥有的东西的简单地图done@MahdiKhalili我为每个委托使用了Loader,然后跟踪每个委托离当前查看位置的距离(contentX/contentY+width/height),并相应地加载/卸载委托(请参见Loader::source)。需要进行大量的微调才能很好地工作(用于将我的解决方案与WebRowser处理一些大型图片列表的方式(滚动的平滑度和RAM使用情况)进行比较),但我对结果非常满意。很抱歉,我无法共享我的代码,因为我在实现此功能时与一家公司签订了协议。