5

我有一个 QGraphicsScene 我想复制并附加到列表的开头。这样做的最佳方法是什么?

QGraphicsScene* m_scene = new QGraphicsScene();
QGraphicsScene* m_DuplicateScene;

QList<QGraphicsScene *>m_list;
4

2 回答 2

6

这样做会非常复杂,因为您对m_scene. 即使您为每种类型dynamic_cast创建了一个函数,您仍然需要记住其他人可以继承并创建他们自己类型的图形项,使它们无法被您克隆。clone()QGraphicsItemQGraphicsItem

基本上,不,你不能复制一个QGraphicsScene(克隆过程中的所有项目)。您甚至不能引用原始场景的孩子的孩子,因为 aQGraphicsItem只能有一个场景。

当然,除非我错过了方法调用。但是,搜索“克隆”、“复制”和“重复”没有产生任何结果。

在第二个问题上,使用QList<T *>::push_front. 因此,m_list.push_front( m_DuplicateScene);

(旁注:您添加到列表的开头,并添加到列表的末尾。)

于 2008-11-23T02:41:23.520 回答
0

我在我的项目中复制了 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);
    }
}
于 2018-09-18T10:27:20.577 回答