我有一个要复制并追加到列表开头的QGraphicsScene。做这件事的最好方法是什么?
QGraphicsScene* m_scene = new QGraphicsScene();
QGraphicsScene* m_DuplicateScene;
QList<QGraphicsScene *>m_list;发布于 2008-11-23 02:41:24
这样做会非常复杂,因为您对m_scene的子类一无所知。即使您dynamic_cast并为每种类型的QGraphicsItem创建了一个clone()函数,您仍然需要记住,其他人可以子类化QGraphicsItem并创建他们自己类型的图形项,从而使您无法复制它们。
基本上,不能复制QGraphicsScene (复制过程中的所有项)。您甚至不能引用原始场景的子级,因为QGraphicsItem只能有一个场景。
当然,除非我错过了一个方法调用。然而,搜索“克隆”、“复制”和“复制”都没有结果。
对于第二个问题,请使用QList<T *>::push_front。因此,m_list.push_front(m_DuplicateScene);
(附注:您可以预先考虑列表的开头,并追加到列表的末尾。)
发布于 2018-09-18 18:27:21
我在我的项目中复制了QGraphicsScene的项目。我就是这样用的。可能会有帮助。
我有一个这样的类:
class DiagramScene : public QGraphicsScene
{
[some datas]
}和下面这样的另一个类:
class DiagramItem : public QGraphicsItem
{
}在copy函数中,我使用如下代码:
Diagram_Scene myScene;
foreach (QGraphicsItem *item, diagram_scene1->items())
{
if(item->type() == DiagramItem::Type)
{
DiagramItem *di = qgraphicsitem_cast<DiagramItem*>(item);
myScene.addItem(di);
}
}https://stackoverflow.com/questions/267998
复制相似问题