1

QGraphicsView / QGraphicsScene / QGraphicsItemを使用して、別のQGraphicsItemの複数のビューを作成する必要があります。

つまり、QGraphicsScene内で、画面外のどこかに格納されている他のQGraphicsItemの一部を表示する複数のQGraphicItemを作成する必要があります。これはモデル/ビューフレームワークのようなもので、1つのQGraphicsItemがモデルのように機能し、他のQGraphicsItemがビューのように機能します(他のアイテムの(クリップされた)部分を表示します)。(添付写真参照) 写真

どうやってやるの?「ビュー」は読み取り専用ではないことに注意してください。各ビューは、マウスの動きやキーボード入力に反応し、モデル内の一部のアイテムが変更されたときに適切に再描画する必要があります。

これを行う最も愚かな方法は、非表示のアイテムをQImageに描画してから、そのQImageの一部を他のアイテム内に表示することです。ただし、それは多くの無駄なメモリを意味します。それを行う他の方法はありますか?

Qt 4.8、VC2008 Express、Windowsプラットフォーム。

- 編集 -

シーン内のシーン(またはオフスクリーンQGraphicsItem)の一部を表示する必要があります。3Dゲームのポータルのようなものです。

4

1 に答える 1

0

いくつかの調査の結果、(私が知る限り)Qtにはこの種のシナリオに対する(文書化された)方法がないことがわかりました。

だから私は自分のメソッドをいくつか書くことにしました

  1. QGraphicsItems階層を任意のQPaintDeviceに描画します(子階層をトラバースし、関連するすべてのアイテムに対してpaint()メソッドを呼び出します)
  2. 入力(マウス/キーボード)イベントを任意のリージョンから選択したQGraphicsItemに変換します。

クリッピング(子をその形状でクリップするアイテム)とQGraphicsWidgetのような複雑なコンポーネントの再描画を処理する必要があるため、これは実際には少し注意が必要かもしれませんが、私が知る限り、それは可能です。また、これを行うと、QGraphicsViewが提供するBSP最適化が失われますが、私の特定のシナリオでは、許容できるトレードオフになるはずです。

于 2013-03-15T05:59:54.623 に答える