10

Qt4でウィジェットを表示するグラフィックデータを作成していますが、それを使用したり、データ項目のQGraphicsScene作成などに誘惑されました.QGraphicsItem

ただし、コントロールのレイヤーを追加したかった (例: スクロールバー、ズーム + その他のボタン - Google マップなどと同様のスタイルにしたい、つまり、ウィジェット全体にデータが表示され、ボタンはそれらの上に表示されます) ウィジェットに。したがって、それらをシーンに追加することは実行可能かもしれないと考えました (おそらく、データの上に表示される a の子としてQGraphicsGroupItem)。しかし、ウィジェット全体のサイズを変更するときにそれらを移動してサイズ変更したいので、QGraphicsLayoutそれらを管理するために a を使用する必要があります。しかし、この時点で、物事はかなり複雑であることがわかりました。

問題は、 を使用する場合QGraphicsLayout、次の制約が成り立つことです。

  1. レイアウトQGraphicsWidgetで管理できるのは
  2. QGraphicsLayoutの子を管理するためにのみ使用できますQGraphicsWidget

つまり、コントロールを として作成しQGraphicsWidget、トップ レベルQGraphicsWidgetをデータ ウィジェットに追加し、このトップ レベル ウィジェットのサイズを自分で管理する必要があります。

だから私は尋ねたい:

  1. 従来のアプローチ (つまり、すべてのコントロールにプレーンな古いウィジェットを使用QGraphicsSceneし、データを表示するためだけに使用する) の方が合理的ではないでしょうか?

  2. この場合に使用する利点はありますかQGraphicsScene(パフォーマンスまたはシンプルさ...)?

  3. QGraphicsSceneその強みを活かすにはどうすればいいの?

4

2 に答える 2

7

QGraphicsSceneQt 4.4以降、以下を使用してクラシックウィジェットをに埋め込むことができますQGraphicsProxyWidget

QWidget *widget = new QWidget;
QGraphicsScene scene;
QGraphicsProxyWidget *proxy = scene.addWidget(widget);
于 2009-07-29T02:14:05.363 に答える
1

QGraphicsSceneほとんどのディスプレイに(または他のウィジェットが)適切であると思われる場合は、それを使用してください。過去にやや似たようなことをしたのは、から(何らかの方法で)継承するカスタムウィジェットを作成しQWidget、そのウィジェットの上にレイアウトでコントロールウィジェットを配置することです。これは、ウィジェット全体が描画したいものを描画し、コントロールウィジェットがその上にあり、ウィジェット全体のサイズが変更されるとサイズが変更されることを意味します。

あるいは、レイアウトウィジェットが簡単に処理するには少し複雑すぎるレイアウトが2、3回ありました。カスタムレイアウトを作成するのではなく、レイアウトなしで配置し、サイズ変更イベントのコードで移動しました。それも同様に機能します。

于 2009-06-24T18:32:54.930 に答える