Qt 如何在QML中可视化QImage

Qt 如何在QML中可视化QImage,qt,qml,qimage,Qt,Qml,Qimage,我有一个QAbstractListModel,其中包含自定义对象作为项。每个对象都有一个从数据库加载的QImage。我在QML中使用ListView来可视化它,但我没有看到在委托中表示QImage的任何含义图像原语似乎只接受URL 我展示QImages的唯一方法是创建一个QQuickImageProvider,每个元素有一个URL的自定义系统(看起来完全是多余的)?我认为QQuickImageProvider是正确的方法 此外,我认为如果您确切了解Qt内部工作原理,可以使用“overkill”一

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


我展示
QImage
s的唯一方法是创建一个
QQuickImageProvider
,每个元素有一个URL的自定义系统(看起来完全是多余的)?

我认为QQuickImageProvider是正确的方法

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

AFAIK下面有一个复杂的图像(和其他数据)缓存系统,因此一旦加载了图像pixmap(并且没有更改),数据检索就会立即进行。因此,不要过度杀戮,因为在任何情况下,在某个时候你都需要加载那些QImage,但只需一次

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

换句话说,你最终会有:

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

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

我不认为这是一个适当的方式在我的情况下,正如我所说,我认为这是一个过度杀伤力。真的很遗憾,没有一个简单的方法来可视化QImage。我已经更新了我的答案。如果overkill实现了一个QQuickImageProvider,那就另当别论了。但我们并不懒惰,是吗?:)我的意思是我不需要QQuickImageProvider,因为我已经加载了我所需的所有图像。但我明白,要做到这一点并不容易。谢谢,“Hot”是“How”的错别字肯定吗?可能是