2017-04-02 21 views
-1

私はカスタムオブジェクトを項目として持つQAbstractListModelを持っています。各オブジェクトには、データベースからロードされたQImageがあります。私はQMLでListViewを使用してそれをビジュアライズしていますが、デリゲートにQImageを表す意味はありません。 ImageプリミティブはURLのみを受け入れるようです。QImageをQMLで視覚化する方法

私がQImageを表示する唯一の方法は、要素ごとにいくつかのカスタムシステムを使ってQQuickImageProviderを作成することです(トータルオーバーキルのように見えます)?

+0

"どのように"どういう意味ですか? – timday

+0

[QMLとC++イメージの相互運用性]の可能な複製(http://stackoverflow.com/questions/27429371/qml-and-c-image-interoperability) – dtech

答えて

2

私はQQuickImageProviderが適切な方法だと思います。

また、Qt内部の仕組みを正確に把握している場合は、「過剰使用」という言葉を使用することもできます。そうでなければ、それはちょうど推測です。

AFAIKイメージ(およびその他のデータ)の下に複雑なキャッシュシステムがあるため、イメージピックスマップがロードされても(変更されないと)データの取得は即時になります。いずれにしても、QImageをロードする必要がある場合もありますが、を1回だけにロードする必要があります。

QQuickImageProviderは、毎回ラスタライズされたデータではなく、キャッシュされたデータへのポインタを提供すると信じています。さらに、ブリッティング操作は今日ではハードウェアアクセラレーションで実行されているため、1ミリ秒で動作する単一操作です。あなたが持っ終わるつまり

  • は、URLで私にイメージを与える「画像:// XYZ」
  • はQtはキャッシュで検索して、データのポインタを返すかの全負荷を行い、見つからない場合は、画像は
  • QMLレンダラは、OpenGL
  • 1つのブリット操作(マイクロ秒)のデータ配列を渡し、あなたが画面上にそれを持って
+0

私は私のケースでは適切な方法ではありません。私はそれが過度のものだと言った。本当にQImageを視覚化する簡単な方法がないことは悲しいことです。 – user14416

+0

私は自分の答えを更新しました。もし過剰殺害がQQuickImageProviderを実装しているなら、別の話です。しかし、私たちは怠惰ではありませんか? :) –

+0

))QQuickImageProviderは必要ありません。なぜなら、私に必要なすべてのイメージを既にロードしているからです。しかし、私はそれを行う簡単な方法がないことを理解しています。ありがとうございました。 – user14416

0

QML ShaderEffectは、QImageをGLSL Sampler2Dにバインドします。 ShaderEffectドキュメントの「プロパティがGLSLの一様変数にマップされる仕組み」のリストを参照してください。 ShaderEffectにGLSLを書き込んで、ピクセルを通過させる必要があります(コードにアクセスしたときに、このポストをいくつかの例で更新します)が、QSGに優しいall-QML要素です。 QImagesを描画します。

関連する問題