2009-07-13 112 views
1

我有一個應用程序顯示使用QGraphicsScene對象的圖的編輯器。我想創建同一個對話框的只讀​​版本,但有能力讓用戶同時看到兩者。在Qt中的兩個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個實例,並在第二個它會從第一個所有項目使用的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項目的模型項目,這就是爲什麼當第二個場景被添加到第一個場景時,它們最終被移除的原因。我會嘗試分離它們。謝謝。 – 2009-07-13 18:22:28

1

如果您只想在模型上使用交互式視圖和只讀視圖您可以使用單個QGraphicsScene和2個QGraphicsViews。你只需要在其中一個上調用QGraphicsView :: setInteractive(false)。這樣你就不必更改任何項目標誌。

相關問題