2008-11-06 3 views
4

J'ai un QGraphicsScene que je veux copier et ajouter au début d'une liste. Quelle est la meilleure méthode pour le faire?Qt QGraphicsScene copy

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

QList<QGraphicsScene *>m_list; 
+0

Append à la liste, ou insérer au début de la liste (parfois appelée précédez)? Aussi, voulez-vous juste copier le pointeur, ou toute la scène? –

+0

Je veux copier toute la scène et l'ajouter à la liste. –

Répondre

5

Faire cela serait très compliqué parce que vous ne savez pas quoi que ce soit au sujet des enfants de m_scene. Même si vous dynamic_cast et créez une fonction clone() pour chaque type de QGraphicsItem, vous devez toujours vous rappeler que d'autres personnes peuvent sous-classer QGraphicsItem et créer leur propre type d'élément graphique, ce qui les rend non clones par vous.

Fondamentalement, non, vous ne pouvez pas dupliquer un QGraphicsScene (en clonant tous les éléments dans le processus). Vous ne pouvez même pas faire référence aux enfants des enfants de la scène d'origine car un QGraphicsItem ne peut avoir qu'une seule scène.

À moins de manquer un appel de méthode, bien sûr. Les recherches de "clone", "copy" et "duplicate" n'ont cependant donné aucun résultat.

Sur votre deuxième question, utilisez QList<T *>::push_front. Ainsi, m_list.push_front (m_DuplicateScene);

(Note: vous préfixer le début d'une liste, et ajouter à la fin d'une liste.)

+0

Merci, j'ai fini par créer une méthode qui sérialisait les propriétés Scenes, puis itérait à travers les objets Scenes et les amenait à se sérialiser aussi. C'est lent et beaucoup de travail mais ça marche. –