如何在QML中可视化QImage

时间:2017-04-02 12:56:05

标签: qt qml qimage

我有一个QAbstractListModel,其中包含自定义对象作为项目。每个对象都有一个从数据库加载的QImage。我在QML中使用ListView来可视化它,但我认为在委托中代表QImage没有任何意义。 Image原语似乎只接受URL。

我展示QImage的唯一方法是创建一个QQuickImageProvider,其中每个元素都有一些自定义URL系统(看起来像是一个过度杀手)?

2 个答案:

答案 0 :(得分:2)

我认为QQuickImageProvider是正确的方法。

另外,如果您确切知道Qt内部的工作方式,我认为您可以使用“overkill”这个词。否则它只是在猜测。

AFAIK下面有一个复杂的图像缓存系统(和其他数据),所以一旦加载了图像像素图(并且没有改变),数据检索就会立即进行。所以没有任何矫枉过正,因为无论如何在某些情况下你需要加载那些QImage,但只需一次

我相信QQuickImageProvider提供指向缓存数据的指针,而不是每次都提供整个栅格化数据。此外,blitting操作现在使用硬件加速执行,因此它只需要几分之一毫秒的单个操作。

换句话说,你最终得到了:

  • 用网址“image:// xyz”
  • 给我图片
  • Qt在缓存中查找并返回数据指针或在未找到图像的情况下执行完整加载
  • QML渲染器将数据数组传递给OpenGL
  • 一个单一的blit操作(微秒),你在屏幕上显示它

答案 1 :(得分:0)

QML ShaderEffect将QImage绑定到GLSL Sampler2D。请参阅ShaderEffect文档中的“属性如何映射到GLSL统一变量”列表。在ShaderEffect中需要几行GLSL写入来传递像素,(当我可以访问我的代码时,会在某个时候用一个例子更新这篇文章),但结果是一个快速的,QSG友好的全QML元素,它可以渲染QImages。