Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt-qs基因拷贝_C++_Qt - Fatal编程技术网

C++ Qt-qs基因拷贝

C++ Qt-qs基因拷贝,c++,qt,C++,Qt,我有一个QGraphicscene,我想复制并附加到列表的开头。这样做的最佳方法是什么 QGraphicsScene* m_scene = new QGraphicsScene(); QGraphicsScene* m_DuplicateScene; QList<QGraphicsScene *>m_list; qgraphicscene*m_scene=new qgraphicscene(); qgraphicscene*m_复制场景; QListm_列表; 这样做会非常复杂,

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

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

QList<QGraphicsScene *>m_list;
qgraphicscene*m_scene=new qgraphicscene();
qgraphicscene*m_复制场景;
QListm_列表;

这样做会非常复杂,因为你对
MU场景的孩子们一无所知。即使您为每种类型的
QGraphicsItem
创建一个
clone()
函数,您仍然需要记住,其他人可以将
QGraphicsItem
子类化,并创建自己类型的图形项,使它们不可由您进行压缩

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

当然,除非我错过了一个方法调用。不过,搜索“克隆”、“复制”和“复制”没有结果

关于第二个问题,请使用
QList::push_front
。因此,
m_list.push_front
m_duplicateSecene


(旁注:您可以在列表的开头加上前缀,然后附加到列表的结尾。)

我在我的项目中复制了QGraphicscene的项目。我用这种方式。可能会有帮助。
我有一门课是这样的:

class DiagramScene : public QGraphicsScene
{
[some datas]
}
Diagram_Scene myScene;

foreach (QGraphicsItem *item, diagram_scene1->items()) 
{
    if(item->type() == DiagramItem::Type)
    {
        DiagramItem *di = qgraphicsitem_cast<DiagramItem*>(item);
        myScene.addItem(di);
    }
}
另一类是:

class DiagramItem : public QGraphicsItem
{
}
在复制函数中,我使用如下代码:

class DiagramScene : public QGraphicsScene
{
[some datas]
}
Diagram_Scene myScene;

foreach (QGraphicsItem *item, diagram_scene1->items()) 
{
    if(item->type() == DiagramItem::Type)
    {
        DiagramItem *di = qgraphicsitem_cast<DiagramItem*>(item);
        myScene.addItem(di);
    }
}
Diagram\u场景myScene;
foreach(QGraphicsItem*项,图\u scene1->items())
{
如果(项目->类型()==DiagramItem::类型)
{
DiagramItem*di=qgraphicsitem\u铸件(项目);
myScene.addItem(di);
}
}

附加到列表,或在列表开头插入(有时称为前置)?另外,您只想复制指针还是整个场景?我想复制整个场景,并将其附加到列表中。谢谢,我最终创建了一个方法,该方法序列化了场景属性,然后遍历场景对象,并使它们自身序列化。虽然速度慢,工作量大,但效果很好。