繁体   English   中英

Qt QGraphicsScene复制

[英]Qt QGraphicsScene copy

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

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

QList<QGraphicsScene *>m_list;

这样做会非常复杂,因为您对m_scene 即使您dynamic_cast并为每种QGraphicsItem类型创建了clone()函数,您仍然需要记住其他人可以将QGraphicsItem子类化并创建自己的图形项类型,从而使它们不可克隆。

基本上,不可以,您无法复制QGraphicsScene (克隆流程中的所有项目)。 您甚至不能引用原始场景的子代的子代,因为QGraphicsItem只能有一个场景。

当然,除非我缺少方法调用。 但是,搜索“克隆”,“复制”和“重复”不会产生任何结果。

关于第二个问题,请使用QList<T *>::push_front 因此, m_list.push_frontm_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);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM