我有一个QAbstractListModel,其中包含自定义对象作为项目。每个对象都有一个从数据库加载的QImage。我在QML中使用ListView
来可视化它,但我认为在委托中代表QImage
没有任何意义。 Image
原语似乎只接受URL。
我展示QImage
的唯一方法是创建一个QQuickImageProvider
,其中每个元素都有一些自定义URL系统(看起来像是一个过度杀手)?
答案 0 :(得分:2)
我认为QQuickImageProvider是正确的方法。
另外,如果您确切知道Qt内部的工作方式,我认为您可以使用“overkill”这个词。否则它只是在猜测。
AFAIK下面有一个复杂的图像缓存系统(和其他数据),所以一旦加载了图像像素图(并且没有改变),数据检索就会立即进行。所以没有任何矫枉过正,因为无论如何在某些情况下你需要加载那些QImage,但只需一次。
我相信QQuickImageProvider提供指向缓存数据的指针,而不是每次都提供整个栅格化数据。此外,blitting操作现在使用硬件加速执行,因此它只需要几分之一毫秒的单个操作。
换句话说,你最终得到了:
答案 1 :(得分:0)
QML ShaderEffect将QImage绑定到GLSL Sampler2D。请参阅ShaderEffect文档中的“属性如何映射到GLSL统一变量”列表。在ShaderEffect中需要几行GLSL写入来传递像素,(当我可以访问我的代码时,会在某个时候用一个例子更新这篇文章),但结果是一个快速的,QSG友好的全QML元素,它可以渲染QImages。