首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt QGraphicsScene副本

Qt QGraphicsScene副本
EN

Stack Overflow用户
提问于 2008-11-06 09:02:48
回答 2查看 2.6K关注 0票数 5

我有一个要复制并追加到列表开头的QGraphicsScene。做这件事的最好方法是什么?

代码语言:javascript
复制
QGraphicsScene* m_scene = new QGraphicsScene();
QGraphicsScene* m_DuplicateScene;

QList<QGraphicsScene *>m_list;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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);

(附注:您可以预先考虑列表的开头,并追加到列表的末尾。)

票数 6
EN

Stack Overflow用户

发布于 2018-09-18 18:27:21

我在我的项目中复制了QGraphicsScene的项目。我就是这样用的。可能会有帮助。

我有一个这样的类:

代码语言:javascript
复制
class DiagramScene : public QGraphicsScene
{
[some datas]
}

和下面这样的另一个类:

代码语言:javascript
复制
class DiagramItem : public QGraphicsItem
{
}

在copy函数中,我使用如下代码:

代码语言:javascript
复制
Diagram_Scene myScene;

foreach (QGraphicsItem *item, diagram_scene1->items()) 
{
    if(item->type() == DiagramItem::Type)
    {
        DiagramItem *di = qgraphicsitem_cast<DiagramItem*>(item);
        myScene.addItem(di);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/267998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档