1

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

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 はシーン間のモデルの共有をサポートしていますか? 同じシーンを持ってビューをカスタマイズしようとする唯一の選択肢はありますか? オブジェクトの選択情報が共有されているグラフィックス項目内にあるため、後で機能しないようです。フラグを無効にすると、両方のビューで読み取り専用になります。アドバイスをいただければ幸いです。ありがとう。

4

3 に答える 3

1

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

于 2009-08-28T19:08:03.943 に答える
0

QSceneItems をモデル クラスに格納していると思います。そのため、pScene1 と pScene2 は、モデル自体だけでなく、シーン アイテムも共有しようとしています。シーン アイテムは常に 1 つのシーンにしか配置できないため、これは機能しません。

修正方法は?モデルが GUI を認識しないようにします。何か興味深いことが起こるたびに changed() 通知を発行できるようにします。

次に、各 SimScene が必要な QSceneItems にモデルをラップし、changed() 通知を処理します。

例:

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

于 2009-07-13T15:49:26.457 に答える