Domanda

Ho un'applicazione che visualizza un editor per un diagramma utilizzando oggetto QGraphicsScene. Vorrei creare una versione di sola lettura della stessa finestra di dialogo, ma hanno la capacità per l'utente di vedere entrambi allo stesso tempo.

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

Quando creo 2 istanze di QGraphicsScene e utilizzare addItem sul secondo rimuove tutti gli elementi dalla prima. Ha Qt supporta qualsiasi tipo di condivisione del modello tra le scene? È la mia unica scelta di avere stessa scena e cercare di personalizzare la visualizzazione? Più tardi uno non sembra funzionare perché le informazioni di selezione degli oggetti è dentro gli elementi di grafica condivise quindi se rendo invalido bandiere su di loro diventano letti solo in entrambi i punti di vista. Ogni consiglio è apprezzato. Grazie.

È stato utile?

Soluzione

Credo che si sta memorizzare QSceneItems in classi del modello. A causa di ciò pScene1 e pScene2 stanno cercando di condividere non solo il modello in sé, ma anche gli oggetti di scena. Questo non funzionerà perché qualsiasi elemento scena può essere eseguito solo su una scena in un dato momento .

Come risolvere il problema? Fai la modella non a conoscenza di alcuna interfaccia grafica. Let it emettere cambiato le notifiche () ogni volta che succede qualcosa di interessante.

Poi lasciate ogni modello avvolgere SimScene in qualunque QSceneItems che vuole, e il processo è cambiato () le notifiche.

Esempio:

Modello: Grafico, Bordo, Vertex
GUI SimScene, QEdge, QVertex, QSimInfo, Qbackground, e così via ...

Altri suggerimenti

Se si desidera solo un interattivo e una vista in sola lettura del modello è possibile utilizzare un singolo QGraphicsScene e 2 QGraphicsViews. Devi solo chiamare QGraphicsView :: setInteractive (false) su uno di essi. In questo modo non è necessario modificare le bandiere voce.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top