Question

J'ai une application qui affiche un éditeur pour un diagramme en utilisant l'objet QGraphicsScene. Je voudrais créer une version en lecture seule de la même boîte de dialogue, mais ont la capacité pour l'utilisateur de voir les deux en même temps.

SimScene* pScene1 = new SimScene(model);  // adds model to scene
SimScene* pScene2 = new SimScene(model);  // adds model to scene
QGraphicsView* pView1 = new QGraphicsView();
pView1->setScene(pScene2);
QGraphicsView* pView1 = new QGraphicsView();
pView2->setScene(pScene2);

Quand je crée 2 instances de QGraphicsScene et utiliser addItem sur le second, il supprime tous les éléments de la première. Qt ne supporte toute sorte de partage du modèle entre les scènes? Est-ce que mon choix d'avoir une même scène et essayer de personnaliser la vue? Plus tard, on ne semble pas fonctionner parce que les informations de sélection d'objets est dans les éléments graphiques partagés si je désactive les drapeaux sur eux, ils sont en lecture seule dans les deux vues. Tout conseil est apprécié. Merci.

Était-ce utile?

La solution

Je pense que vous stockez QSceneItems dans les classes de modèle. En raison de cette pScene1 et pScene2 tentent de partager non seulement le modèle lui-même, mais aussi les éléments de la scène. Cela ne fonctionnera pas parce que tout élément de scène peut être placé que sur une scène à un moment donné .

Comment résoudre ce problème? Marque Modèle n'a pas connaissance de l'interface graphique. Laisser émettre des notifications modifiées () chaque fois que se produit quelque chose d'intéressant.

Ensuite, laissez chaque modèle d'enveloppe SimScene dans QSceneItems quel que soit il veut, et le processus de notifications a changé ().

Exemple:

Modèle: Graphique, Bord, vertex
GUI SimScene, QEdge, QVertex, QSimInfo, Qbackground, et ainsi de suite ...

Autres conseils

Si vous voulez juste un environnement interactif et une vue en lecture seule sur votre modèle, vous pouvez utiliser un seul QGraphicsScene et 2 QGraphicsViews. Il vous suffit d'appeler QGraphicsView :: setInteractive (false) sur l'un d'entre eux. De cette façon, vous ne devez pas modifier les drapeaux de l'élément.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top