如何在 QML 中可视化 QImage

How to visualize QImage in QML

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

我要展示 QImage 的唯一方法是创建一个 QQuickImageProvider 和每个元素 URL 的自定义系统(看起来完全矫枉过正)?

我认为 QQuickImageProvider 是正确的方法。

此外,如果您确切了解 Qt 内部的工作原理,我认为您可以使用 'overkill' 这个词。否则只是猜测。

据我所知,下面有一个复杂的图像(和其他数据)缓存系统,所以一旦图像像素图被加载(并且不改变),数据检索是立即的。所以一点也不矫枉过正,因为无论如何在某些时候你需要加载那些 QImage,但只需 一次

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

换句话说,您最终拥有:

  • 给我图片 url "image://xyz"
  • Qt 在缓存中查找 returns 数据指针,如果找不到则执行图像的完整加载
  • QML 渲染器将数据数组传递给 OpenGL
  • 一次 blit 操作(微秒),您就可以在屏幕上看到它

QML ShaderEffect 会将 QImage 绑定到 GLSL Sampler2D。请参阅 ShaderEffect 文档中的 "how properties are mapped to GLSL uniform variables" 列表。需要在 ShaderEffect 中编写几行 GLSL 来传递像素,(当我可以访问我的代码时,有时会用示例更新此 post),但结果是快速、QSG 友好的所有-可以渲染 QImages 的 QML 元素。