私は次のことに悩まされています:
QGraphicsScene
クエリに何か(テーブル、新しい列、その他)を追加したり、クエリから何かを削除したりするなど、ユーザーの操作に基づいてSQLクエリのグラフィック表現をレンダリングする必要があるインタラクティブ機能を使用しています。 (キーワード、テーブル、列...)。シーンの変更は操作後に表示する必要があります。また、クエリの「レンダリング」は「ロジック」レイヤーによって行われるため、アプリケーションの「ロジックレイヤー」はユーザーが行った操作を追跡する必要があります(例: 「ロジックレイヤー」は、すべてのQGraphicsItemGroup
派生オブジェクトを作成します。これらのオブジェクトは、すべてのロジックレイヤーコンポーネントが構築された後、クエリのグラフィックシーンに追加され、ウィンドウに配置されます。
発生する問題は次のとおりです。現在、可能な限りスムーズな方法で変更した後、クエリを表示するための使用可能なソリューションを見つけることができませんでした。
詳細な説明のためにスクリーンショットにリンクさせてください:
ユーザーがPERSON.NAME
クエリから列を削除したいとします。アプリケーションで何が起こるか:
PERSON.NAME
ユーザーは、列のグラフィックアイテムの[削除](列名の後にある小さな赤いX)ボタンをクリックします。- グラフィックビューはこの操作を検知し、REMOVE列をグラフィックシステムから「ロジックレイヤー」(「モデル」)に送信します。
PERSON.NAME
ロジックレイヤーは、その順番で、列を表す対応する「ロジックレイヤー」オブジェクトを削除します。
そしてここで問題が始まります:
- グラフィック全体(はい、すべて)がロジックレイヤーによって再レンダリングされ、同じクエリのグラフィックアイテムが作成されます。
PERSON.NAME
QGraphicsScene
次に、新しいオブジェクトと一緒に新しいウィンドウを作成する必要がありますQGraphicsView
- クエリを表す再レンダリングされたオブジェクトのグラフィックアイテムを(ただし、
PERSON.NAME
列なしで)新しいQGraphicsScene
withに挿入します。addItem()
- そして、アプリケーションの中央ウィジェットを新しいウィンドウに置き換えます。
- これで、実際、クエリで
PERSON.NAME
がもう存在せず、下にあったすべてのグラフィック要素がPERSON.NAME
画面上で上に移動したことがわかります。
明らかにこれは良い解決策ではありません。ウィンドウを変更すると醜いちらつきがありますが、これまでこの問題に対するより良い解決策は見つかりませんでした。
したがって、新しいウィンドウなしで、上記の背景情報を知っている新しい要素の削除(追加)時に画面を更新するこの方法論に対してどのような改善を行うことができるかを特定するために、あなたの助けを求めています。明らかに他の、mroeの一般的なグラフィック関連のコメントも歓迎します。
ありがとう