2012-02-25 3 views
9

私は以下のUIを持っています。ここでは、超音波(周波数+時間音の表現)が表示されます。したがって、画像はどこかからロードされていないので、WAVファイルを読み取っている間に、それはQPainterによって描画されます。ウィンドウ内で1024x90000イメージを効果的にスクロールする方法はありますか?

The UI

私の現在の実装では、画像が描画されている単一の巨大QImageオブジェクトです。

QPainter painter(this); 
// (int, int, QImage*, int, int) 
painter.drawImage(0, 0, *m_sonogram, 0, m_offset); 

しかし、私が知っているように、QPixmapは、画面上のピックスマップを表示するために最適化されているので、私は後QPixmapQImageを変換する必要があります。そしてpaintEvent()に、私は、ウィジェット上で大QImageの一部を描きますソノグラムの描画は行われますか?

また、小さいサイズの別のQPixmapオブジェクトのリンクリストのいくつかの種類として大きな画像を保つというようにQtの自動切断手順とを避けるために、小さなオブジェクトのリスト上で動作するようにpaintEvent()を賢くする価値がありますか?

私のQImageが十分大きい場合は、それぞれpaintEvent()が多く、CPUを消費します。

アドバイスのすべての種類は、あなたが静止画像(または不定期に更新画像)を持っている場合、それは(パフォーマンスのために)十分価値がある、Qtのアプリ開発の私の限られた経験で歓迎:)

+0

おそらく、これを実行したいマシンに関するものを投稿してください。リンクされたリストを使用することは、ターゲットマシンに応じてスマートになる可能性があります。 – EKS

+3

多分私は間違っていますが、ペイントイベントごとにイメージ全体を描画しているようです。ビューポートに現在表示している画像の部分だけをペイントすることができます。 CPU消費量を一定に保つ必要があります。 – Masci

+0

@Masci:QPaintEventドキュメントの「Automatic Clipping」を参照してください。Qtはこれを自動的に行い、QPaintEventクリッピング状態を明示的にQPainterにコピーする必要はありません。 – timday

答えて

1

はい、あり作成QPixmapを手に入れて、paintEventハンドラのQPainter::drawPixmap経由で使用してください。

しかし、私は約4Kx4Kイメージより大きなものでこれをやってみたことがありませんでした。あなたのグラフィックスメモリにストレスを与え始めると、あなたの巨大なイメージにうまくやってしまうか、複雑なタイリングシステムを追加することを検討する前に、それを試してみてください。

関連する問題