Frage

Ich habe eine Anwendung, die einen Editor für ein Diagramm zeigt mit QGraphicsScene Objekt. Ich möchte eine Nur-Lese-Version des gleichen Dialog zu schaffen, sondern haben die Fähigkeit für Benutzer beide zur gleichen Zeit zu sehen.

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);

Wenn ich erstellen 2 Instanzen von QGraphicsScene und verwenden addItem auf dem zweiten es alle Elemente aus dem ersten entfernt. Unterstützt Qt jede Art von Austausch von Modell zwischen den Szenen? Ist meine einzige Wahl gleiche Szene zu haben und versuchen, die Ansicht anpassen? Später scheint man nicht, weil die Objektauswahl zu arbeiten Informationen innerhalb der Grafiken Artikel ist geteilt wird also, wenn ich Flags deaktivieren auf sie sie nur in den beiden Ansichten zu lesen sein. Jede Beratung wird geschätzt. Danke.

War es hilfreich?

Lösung

Ich denke, dass Sie QSceneItems in Modellklassen sind zu speichern. Aus diesem Grunde pScene1 und pScene2 versuchen, nicht nur das Modell selbst, zu teilen, sondern auch die Szene Gegenstände. Das wird nicht funktionieren, weil jede Szene Artikel kann nur auf einer Szene zu einem bestimmten Zeitpunkt platziert wird .

Wie es zu beheben? Machen Modell eines GUI nicht bewusst. Lassen Sie es ausgeben geändert () Benachrichtigungen, wenn etwas Interessantes passiert.

Lassen Sie dann jedes SimScene Wrap-Modell in was auch immer QSceneItems es will, und Prozess geändert () Meldungen.

Beispiel:

Modell: Graph, Kante, Vertex
GUI SimScene, QEdge, QVertex, QSimInfo, Qbackground, und so weiter ...

Andere Tipps

Wenn Sie nur eine interaktive und eine schreibgeschützte Ansicht auf dem Modell, das Sie eine einzelne QGraphicsScene und 2 QGraphicsViews verwenden können. Sie müssen nur QGraphicsView :: setInteractive (false) auf einem von ihnen nennen. Auf diese Weise müssen Sie keine Artikel Flaggen ändern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top