Qml 创建用于模型的新自定义快速视图

Qml 创建用于模型的新自定义快速视图,qml,qt5,qtquick2,qabstractitemmodel,Qml,Qt5,Qtquick2,Qabstractitemmodel,我创建了一个自定义视图,以无缝网格排列照片,就像谷歌照片一样(见下文)。我的视图基于qabstractemview(基于Qt小部件)。我想把它移植到QtQuick,以便利用硬件加速、动画和触摸 QtQuick有一些继承自Flickable的视图,您可以将其用于模型,如ListView和GridView。有没有办法创建自己的自定义视图?我想到的事情: 创建一个知道视图宽度的代理模型,并按行排列图像。然后,只需使用一个带转发器的Flickable来读取该模型,并对图像进行布局。缺点:添加数千张这

我创建了一个自定义视图,以无缝网格排列照片,就像谷歌照片一样(见下文)。我的视图基于
qabstractemview
(基于Qt小部件)。我想把它移植到QtQuick,以便利用硬件加速、动画和触摸

QtQuick有一些继承自
Flickable
的视图,您可以将其用于模型,如
ListView
GridView
。有没有办法创建自己的自定义视图?我想到的事情:

  • 创建一个知道视图宽度的代理模型,并按行排列图像。然后,只需使用一个带转发器的Flickable来读取该模型,并对图像进行布局。缺点:添加数千张这样的照片,而不动态加载和回收,会占用太多资源

  • 类似,但在上面我放在一起的每个“行”上使用ListView。使用ListView的循环功能,不要加载太多行。我将不得不禁用选择功能,并在顶部滚动我自己的。可以用,但看起来很粗糙

  • 转到ListView的源代码,并实现类似的功能:
    QQuickListView
    继承自(内部)
    QQuickItemView
    ,它执行了很多繁重的工作,可能还有一些我不需要的东西。这似乎是最正确的方法,但工作量巨大


我的最佳选择是什么?

我认为选项2一点也不粗糙,而且会很好地工作。您可能希望预处理图像,以便ListView模型对图像集进行排序,其中每个图像集都是要在每行上显示的图像,并且每行都是图像的行布局。它应该具有良好的伸缩性。