我有一个 QGraphicsScene 我想复制并附加到列表的开头。这样做的最佳方法是什么?
QGraphicsScene* m_scene = new QGraphicsScene();
QGraphicsScene* m_DuplicateScene;
QList<QGraphicsScene *>m_list;
这样做会非常复杂,因为您对m_scene
. 即使您为每种类型dynamic_cast
创建了一个函数,您仍然需要记住其他人可以继承并创建他们自己类型的图形项,使它们无法被您克隆。clone()
QGraphicsItem
QGraphicsItem
基本上,不,你不能复制一个QGraphicsScene
(克隆过程中的所有项目)。您甚至不能引用原始场景的孩子的孩子,因为 aQGraphicsItem
只能有一个场景。
当然,除非我错过了方法调用。但是,搜索“克隆”、“复制”和“重复”没有产生任何结果。
在第二个问题上,使用QList<T *>::push_front
. 因此,m_list.push_front
( m_DuplicateScene
);
(旁注:您添加到列表的开头,并添加到列表的末尾。)
我在我的项目中复制了 QGraphicsScene 的项目。我正在使用这种方式。可能会有所帮助。
我有这样的课:
class DiagramScene : public QGraphicsScene
{
[some datas]
}
和这样的另一个类:
class DiagramItem : public QGraphicsItem
{
}
在复制功能中,我使用这样的代码:
Diagram_Scene myScene;
foreach (QGraphicsItem *item, diagram_scene1->items())
{
if(item->type() == DiagramItem::Type)
{
DiagramItem *di = qgraphicsitem_cast<DiagramItem*>(item);
myScene.addItem(di);
}
}