2012-01-28 293 views
2

我已經創建了自己的類,用於保存向量的向量,每個位置保持一個自定義QGraphcsItem(圖表)。我試圖創建撤銷/重做功能,我採用的方法是使用堆棧來保存圖表的每個狀態。這兩種方法我想是:Qt的C++ - 克隆對象

  1. 創建頂級QVector,這反過來將需要克隆它裏面的所有的子向量,然後將需要複製所有的QGraphicsItems的克隆。我想我可以循環遍歷每個維度,爲外部循環創建QVector,然後在內部循環中克隆QGraphicsItem,除非可以簡單地克隆基本QVector(並且內在地克隆裏面的所有內容 - 目前裏面的所有內容都是指針)。

  2. 本質上建立一個新的QVector出圖表的當前狀態,而不是直接克隆圖表。每個的QGraphicsItem具有get/set函數來獲取我需要的任何屬性,所以我可以只創建一個新的頂級QVector,外環創建各行的新QVector,則內環創造新QGraphicsItems,並設置在原有的性能圖表。

有沒有簡單的方法來克隆一個項目,克隆一切內部?或者我基本上必須實現自己的克隆功能並「重建」當前狀態?

+0

Qt擁有一個撤銷/重做的實現,你讀過嗎? http://developer.qt.nokia.com/doc/qt-4.8/qundo.html – borges 2012-01-28 23:01:56

+0

請注意,'QGraphcsItem'不可變更 – Lol4t0 2012-01-29 19:28:57

回答

2

感謝您的意見 - 我從來不知道Qt的撤銷/重做的實現。我最終實現了自己的控制權。

對於類似問題的其他人將來參考,我第一次嘗試創建一個新的二維矢量持有圖表的「狀態」,充滿了QGraphicsItems。這個工作起初,直到圖表是一個很大的尺寸,每次更新圖表時生成10,000個新的QGraphicsItems,以及刪除當前的10,000和添加新的10,000是難以忍受的緩慢。

我改變它,而不是存儲舉辦的圖表狀態的性質(剛的QColor,字符串,等等),而不是QGraphicItems自己一個2DVector。這讓我只更新圖表,而不是完全重新創建圖表。