2009-07-13 10 views
1

QGraphicsSceneオブジェクトを使用してダイアグラムのエディタを表示するアプリケーションがあります。私は同じダイアログの読み取り専用バージョンを作成したいが、ユーザーが両方を同時に見ることができるようにする。Qtの2つのQGraphicSceneインスタンスで同じモデルを共有する

SimScene* pScene1 = new SimScene(model); // adds model to scene 
SimScene* pScene2 = new SimScene(model); // adds model to scene 
QGraphicsView* pView1 = new QGraphicsView(); 
pView1->setScene(pScene2); 
QGraphicsView* pView1 = new QGraphicsView(); 
pView2->setScene(pScene2); 

QGraphicsSceneの2つのインスタンスを作成し、2番目のインスタンスでaddItemを使用すると、最初のインスタンスからすべてのアイテムが削除されます。 Qtはシーン間でモデルの共有をサポートしていますか?同じシーンを持ち、ビューをカスタマイズしようとする私の唯一の選択ですか?後でオブジェクト選択情報が共有されているグラフィックアイテム内にあるため、フラグを無効にすると両方のビューでのみ読み込まれるため、後で動作するようには見えません。アドバイスをいただければ幸いです。ありがとう。

答えて

0

QSceneItemsをモデルクラスに保存していると思います。そのため、pScene1とpScene2は、モデル自体だけでなく、シーン項目も共有しようとしています。シーンアイテムcan be placed only on one scene at any given momentがあるため、これは機能しません。

修正方法?モデルにGUIが認識されないようにする。興味深いことが起こるたびにchanged()通知を発行させてください。

そして、各SimSceneラップモデルを必要なQSceneItemsに置き換え、changed()通知を処理します。

例:

モデル: グラフ、 エッジ、 頂点
GUI SimScene、 QEdge、 QVertex、 QSimInfo、 Qbackgroundなど...

+0

あなたは正しいです。既存のシステムにはGUIアイテムとしてのモデルアイテムがあります。そのため、第2シーンに追加すると、最初のシーンから削除されてしまいます。私はそれらを分離しようとします。ありがとう。 –

1

モデルでインタラクティブな表示と読み取り専用の表示が必要な場合1つのQGraphicsSceneと2つのQGraphicsViewを使用できます。そのうちの1つでQGraphicsView :: setInteractive(false)を呼び出すだけです。そうすれば、アイテムフラグを変更する必要はありません。

関連する問題