Qt克隆对象
Qt Cloning an object
我创建了自己的类,该类包含Vector of Vectors,每个位置都包含一个自定义的QGraphcsItem(图表)。我正在尝试创建撤消/重做功能,我采用的方法是使用堆栈来保存图表的每个状态。我想的两种方法是:
-
创建顶级QVector的克隆,然后需要克隆其中的所有子Vector,然后需要复制所有QGraphicsItems。我想我可以遍历每个维度,为外循环创建QVector,然后在内循环上克隆QGraphicsItem,除非可以简单地克隆基本QVector(并固有地克隆内部的所有内容-目前内部的所有东西都是指针)。
-
本质上是从图表的当前状态构建一个新的QVector,而不是直接克隆图表。每个QGraphicsItem都有get/set函数来检索我需要的任何属性,所以我可以创建一个新的顶级QVector,外循环为每一行创建一个新QVector。然后内循环创建新的QGraphicsItems,并设置原始图表的属性。
有没有一种简单的方法可以克隆一件物品,从而克隆里面的所有东西?还是我基本上必须实现自己的克隆功能并"重建"当前状态?
感谢您的评论-我从来不知道Qt undo/redo实现。我最终实现了自己的控制。
为了将来参考其他有类似问题的人,我首先尝试创建一个新的2D Vector来保存图表的"状态",其中填充了QGraphicsItems。起初,这是有效的,直到图表变得如此之大,以至于每次更新图表时生成10000个新的QGraphicsItems,以及删除当前的10000个并添加新的10000个都慢得令人难以忍受。
我把它改为存储一个2DVector,它包含图表状态的属性(只有QColor、字符串等),而不是QGraphicItems本身。这使我可以只更新图表,而不是完全重新创建图表。
- 如何在QT Creator上将QWidget声明为继承类的对象
- 如何在qt中将信号和插槽与另一个对象连接 --解决了
- Qt:从另一个窗口访问公共对象
- 通过插槽和信号在不同线程中的两个qt对象之间进行通信
- 如何在qt中将对象添加到现有布局中?--已解决
- 如何注册Qt C++对象以在QML中使用它
- 如何在Qt中连接来自不同窗口的两个对象?
- 将对象传递给多线程对象 Qt
- Qt:如何通知对象已建立涉及它的信号槽连接
- Qt访问每个类中的查看器对象?
- Qt调试:我如何知道QCoreApplication::notifyInternal2正在向哪个对象发送消息?
- Qt c++不会为所有对象调用move_slot.为什么?
- Qt对象所有权内存泄漏
- CMake + Qt,moc 编译失败,无法实现 QMetaObject 方法(编译器找不到基本 ui 对象的标头?
- 在Qt中执行完所有插槽后,如何释放对象
- 两个对象QT之间的示例插槽/信号
- 使用派生的类对象 Qt 访问基类信号
- 堆栈对象Qt信号和参数作为参考
- 重用QProcess对象(Qt 4.8)
- QWebEngine & QWebChannel:传输对象"qt.webChannelTransport"在页面重新加载后消失