gpt4 book ai didi

c++ - Qt c++ - 克隆一个对象

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:56:31 24 4
gpt4 key购买 nike

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

  1. 创建顶层 QVector 的克隆,后者需要克隆其中的所有子 vector ,然后需要克隆所有 QGraphicsItem。我想我可以遍历每个维度,为外循环创建 QVector,然后在内循环上克隆 QGraphicsItem,除非可以简单地克隆基本 QVector(并且固有地克隆里面的所有东西——目前里面的所有东西都是指针)。

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

有没有一种直接克隆一个项目的方法,可以克隆里面的所有东西?或者我基本上必须实现自己的克隆功能并“重建”当前状态?

最佳答案

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

为了将来有类似问题的其他人引用,我首先尝试创建一个新的 2D Vector 来保存图表的“状态”,其中填充了 QGraphicsItems。这在一开始是有效的,直到图表变得如此之大以至于每次更新图表时都会生成 10,000 个新的 QGraphicsItems,以及删除当前的 10,000 个和添加新的 10,000 个非常慢。

我将其更改为存储一个 2DVector,该 2DVector 包含图表状态的属性(仅 QColor、字符串等),而不是 QGraphicItems 本身。这让我可以只更新图表,而不是完全重新创建图表。

关于c++ - Qt c++ - 克隆一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9049099/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com