0

QGraphicsView ウィジェットを介して動的に生成された画像のコレクションがあり、ユーザーにそれらの中から選択してもらいたいです。その目的のために、私はカスタム ウィジェット内に利用可能な画像をある種のグリッドで表示し、ユーザーに興味のある画像をクリックさせます。

複数の質問が発生します。

  • すでにこの目的に適合する既存のウィジェットはありますか?
  • QGraphicsView アイテムによるすべてのマウス イベント処理を無効にする方法を見つける必要がありますか、またはそれらをインターセプトするグラフィック ビューの前に透明なウィジェットを追加できますか?
  • 多くの QGraphicsView ウィジェット (最大で数百) を表示するパフォーマンスの問題はありますか? 最初にそれらをプレーンなイメージにエクスポートする必要がありますか?
4

1 に答える 1

1

まず、いいえ、その目的のために特別に設計されたウィジェットはありません。

QGraphicsView の目的を理解していないと思います。これは、多くの QGraphicsItem を保持するための QGraphicsScene を表示するためのものです。あなたの投稿に基づいて、複数の QGraphicsViews が必要な理由がわかりません。QGraphicsView を 1 つ持つだけで、そのシーン内に多くの画像を表示できます。たとえば、QGraphicsPixmapItemを参照してください。

何百もの QGraphicsView を持つべきではありません。おそらく、QGraphicsScene に多くの QGraphicsItem を表示する 1 つだけが必要です (ただし、特定の状況ではいくつかが正当化される可能性があります)。一度に何百もの QGraphicsItems を確実に表示できます。あなたの場合、おそらく QGraphicsItem のサブクラスである QGraphicsPixmapItems が必要です。複数の QGraphicsScenes を使用して、関連するものを表示することもできますQGraphicsView::setScene。ユーザーがグリッドから画像を選択してその画像を操作できるようにする場合は、State Patternを参照します。

QGraphicsViews、QGraphicsScenes、または QGraphicsItems でマウス処理を無効にする理由が思いつきません。これらが独自のマウスイベントを処理しないのはなぜですか? mousePressEventそれらをサブクラス化し、 、mouseMoveEventmouseReleaseevent などを再実装して、必要な機能を取得できます (必要に応じて実装する必要があります) 。

幸運を!

于 2012-04-24T16:25:52.890 に答える