Pregunta

Tengo una aplicación que muestra un editor para un diagrama usando objeto QGraphicsScene. Me gustaría crear una versión de solo lectura del mismo cuadro de diálogo, sino que tenga la capacidad para el usuario para ver las dos al mismo tiempo.

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

Cuando creo 2 casos de QGraphicsScene y uso addItem en el segundo uno que elimina todos los elementos de la primera. ¿Apoya Qt cualquier tipo de intercambio de modelo entre las escenas? Es mi única opción para tener una misma escena y tratar de personalizar la vista? Más tarde, uno no parece funcionar porque la información de selección de objetos se encuentra dentro de los elementos gráficos que se comparten por lo que si desactivo banderas en ellos se convierten en sólo lectura en ambas vistas. Cualquier consejo es apreciado. Gracias.

¿Fue útil?

Solución

Creo que usted está almacenando QSceneItems en las clases del modelo. Debido a que pScene1 y pScene2 están tratando de compartir no sólo el modelo en sí, sino también los elementos de la escena. Esto no funcionará, ya que cualquier elemento de escena se puede colocar sólo en una escena en un momento dado .

¿Cómo solucionarlo? Hacer modelo no tiene conocimiento de ninguna interfaz gráfica de usuario. Deje que se emita cambiado () notificaciones cada vez que sucede algo interesante.

A continuación, dejar que cada modelo envoltura SimScene en cualquier QSceneItems que quiere, y el proceso de cambiar () notificaciones.

Ejemplo:

Modelo: Grafico, Borde, Vertex
interfaz gráfica de usuario SimScene, QEdge, QVertex, QSimInfo, Qbackground, y así sucesivamente ...

Otros consejos

Si lo que desea es una forma interactiva y una vista de sólo lectura de su modelo se puede utilizar una sola QGraphicsScene y 2 QGraphicsViews. Sólo tienes que llamar QGraphicsView :: setInteractive (falso) en uno de ellos. De esa manera usted no tiene que cambiar cualquier parámetro del artículo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top