Qt c ++ - 克隆一个对象

时间:2012-01-28 22:14:08

标签: c++ qt copy clone undo

我创建了自己的类,它包含一个Vector of Vectors,每个位置都有一个自定义的QGraphcsItem(图表)。我正在尝试创建撤消/重做功能,我采用的方法是使用堆栈来保存图表的每个状态。我正在考虑的两种方法是:

  1. 创建顶级QVector的克隆,然后需要克隆其中的所有子向量,然后需要克隆所有QGraphicsItem。我想我可以遍历每个维度,为外部循环创建QVector,然后在内部循环上克隆QGraphicsItem,除非可以简单地克隆基本QVector(并且固有地克隆内部的所有内容 - 当前内部的所有内容都是指针)。

  2. 基本上从图表的当前状态构建一个新的QVector,而不是直接克隆图表。每个QGraphicsItem都有get / set函数来检索我需要的任何属性,所以我可以创建一个新的顶级QVector,外部循环为每行创建一个新的QVector,然后内部循环创建新的QGraphicsItems,并设置原始的属性图表。

  3. 有没有一种简单的方法来克隆一个项目,克隆内部的一切?或者我基本上必须实现自己的克隆功能并“重建”当前状态?

1 个答案:

答案 0 :(得分:2)

感谢您的评论 - 我从来不知道Qt撤消/重做实现。我最终实现了自己的控制。

对于具有类似问题的其他人的未来参考,我首先尝试创建一个新的2D Vector来保存图表的“状态”,填充QGraphicsItems。这首先起作用,直到图表尺寸如此之大,每次更新图表时都会产生10,000个新的QGraphicsItems,同时删除当前的10,000并且添加新的10,000会非常缓慢。

我把它更改为存储一个2DVector,它保存图表状态的属性(只是QColor,一个字符串等),而不是QGraphicItems本身。这使我只需更新图表,而不是完全重新创建图表。