我創建了一個公共QGraphicsItem Node
類,它爲與我的應用程序相關的一組屬性提供了getter/setter方法。該應用程序是用戶設計模型的圖編輯器。這個Node
類用於填充也是公共QGraphicsScene Diagram
類。Qt - 使用自定義QGraphicsItems保存自定義QGraphicsScene
我現在試圖在應用中實現一個加載/保存機制,使用戶能夠保存和重用模型 - 按照他們保存時的編輯方式進行編輯。我在計算如何解決這個問題時遇到了一些麻煩。
我已經知道我必須獲取QGraphicsItem對象的相關屬性並將它們保存到文件,然後在加載時使用我保存的數據重建場景。我的問題是:當我使用QGraphicsScene::items()
函數時,它返回一個QList<QGraphicsItem *>
。我能做些什麼來讓它返回QList<Node *>
?
如果我得到了我追加到場景中的所有節點的列表,我知道接下來要做什麼。
我開始意識到我可能不得不在我的Diagram
類中重新實現items()
函數,但我希望能更輕鬆地擺脫它。在這種情況下,有人可以解釋怎麼做嗎?
我忘了提及我也有一個公共的QGraphicsItem'Link'類。 'items()'方法也會返回這些實例。如果該項目是'Node'類,那麼如何將代碼調整爲_test_?我不希望/不需要處理'Link'對象... – Joum
您可以通過爲所有項目使用通用基類並從中繼承您的'Node'和''Link'類來解決此問題。稍後,您可以使用'qgraphicsitem_cast'將其轉換爲該基類。我已經更新了代碼來證明這一點。 – tomvodi
如果我沒有弄錯,從我在網上找到的,我的問題的_test_部分只是測試'if(graphicsItem!= 0)'。只有在轉換後,'graphicsItem'不是'MyGraphicsItem'類型,對嗎? – Joum