2012-01-28 152 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。这让我只更新图表,而不是完全重新创建图表。