Копия Qt QGraphicsScene - PullRequest
       16

Копия Qt QGraphicsScene

5 голосов
/ 06 ноября 2008

У меня есть QGraphicsScene, который я хочу скопировать и добавить в начало списка. Каков наилучший способ сделать это?

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

QList<QGraphicsScene *>m_list;

Ответы [ 2 ]

6 голосов
/ 23 ноября 2008

Это было бы очень сложно, потому что вы ничего не знаете о детях m_scene. Даже если вы dynamic_cast и создадите функцию clone() для каждого типа QGraphicsItem, вам все равно нужно помнить, что другие люди могут создавать подклассы QGraphicsItem и создавать собственные графические элементы, что делает их не клонируемыми вами. 1006 *

По сути, нет, вы не можете продублировать QGraphicsScene (клонирование всех элементов в процессе). Вы даже не можете ссылаться на потомков детей оригинальной сцены, потому что у QGraphicsItem может быть только одна сцена.

Если, конечно, я не пропущу вызов метода. Поиск по словам "clone", "copy" и "duplicate" не дал результатов.

По второму вопросу используйте QList<T *>::push_front. Таким образом, m_list.push_front (m_DuplicateScene);

(Примечание: вы добавляете к началу списка и добавляете к концу списка.)

0 голосов
/ 18 сентября 2018

Я делаю копию предметов 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...