3

これは私の最初の質問ですので、ご容赦ください。

現在、私のプログラムには、キャンバスとして機能する親ウィジェットがあります。ユーザーは、実行時にウィジェットを親に追加または削除できます。これらのウィジェットには絶対位置が与えられます。つまり、レイアウトによって配置されません。追加されたウィジェットは、ユーザーが任意に移動できます。

ユーザーがボックスをドラッグしてウィジェットのグループを選択できるようにしたい。ユーザーがドラッグしているときに四角形を表示する部分は既にコーディングしています。ここで、その長方形 (領域) 内のすべてのウィジェットを取得できるようにしたいと考えています。

私は findChild() および findChildren() 関数を認識しており、実際に想定どおりに子を返します。しかし、「キャンバス」内には非常に多くのウィジェットが存在する可能性が高いため、検索を領域の境界に制限する方法が本当に必要です。(私がやっていることの性質上、非常に広い領域に何千ものウィジェットが広がっている可能性があります!)

これが私の質問です。私の最良の選択肢は何ですか? 先に進んで findChildren() を使用し、リストをループして、領域内の子を手動で見つける必要があります。それとも、findChild(x, y) を使用して領域内のすべてのピクセルをループする必要がありますか? それとも、プロセスを高速化するさらに簡単な解決策があるのでしょうか? findChildren(x, y, width, height) の線に沿った何か?

うまくいけば、私の質問は理にかなっています。私はできる限り物事を説明しようとしました。ありがとう!

4

1 に答える 1

3

QGraphicsScene自分でロールバックする代わりに使用していた場合は、これらのitems(..)方法を使用して、特定の地域で子供を非常に効率的に見つけることができたはずです.

BSP 空間アクセラレーション構造を使用しているためにのみ可能です。そのため、妥当な時間内にQGraphicsScene移行できない場合は、独自のものを作成する必要があります。QGraphicsScene思ったほど難しくはありません。私は多数のバウンディング ボリューム階層構造を作成しましたが、それらは非常に簡単です。

于 2012-12-18T07:58:08.177 に答える