Pregunta

Estoy trabajando en una aplicación de mapas y la necesidad de mostrar los objetos de datos utilizando una tabla, un formulario, y como objetos gráficos en el mapa. Estoy usando PyQt, pero eso no es realmente importante ya que esto es una cuestión de Qt no es una cuestión de Python.

Si sólo necesitaba los puntos de vista de tabla y de que esto sería fácil, yo sólo uso el marco de Qt Modelo / Vista. Sin embargo necesito la vista de mapa para proporcionar una funcionalidad realmente sólo disponible utilizando el marco Vista Gráfica, que es esencialmente lo que es propio marco Modelo / Vista con la QGraphicsScene actuando como el modelo de datos.

Me puede pensar en dos maneras de hacer esto. Una de ellas sería comenzar con un modelo de autoridad subclase de QAbstractItemModel, vincularlo a una subclase de QAbstractItemView y desde allí generar y actualizar QGraphicsItems en la escena. Esto se ve mal, porque aunque no estoy seguro de cómo manejar la interacción del usuario con y cambios a los elementos de datos, aunque la interacción con los QGraphicsItems.

La otra manera que puedo pensar para hacerlo es tratar la QGraphicsScene como origen de datos de autoridad, almacenando el objeto de datos en .data de cada QGraphicsItem (a) Propiedad. Entonces había subclase QAbstractItemModel y escribo de modo que accede a los datos de la escena, ya que de almacén de datos, los otros puntos de vista serían entonces utilizar esto como su modelo. ¿Cómo iba a propagar los cambios a los datos en la escena hasta el modelo embargo?

Con independencia del enfoque que tomo, parece que hay una brecha no se maneja por los marcos. En el Modelo / Vista se supone que se hizo en el modelo de todos los cambios. En Vista Gráfica se asumen todos los cambios a realizar en la escena.

Así que el enfoque que elegiría QAbstractItemModel (autorizada) -> QAbstractItemView-> QGraphicsScene o alternativamente QGraphicsScene (autorizada) -> QAbstractItemModel-> Otras vistas. ¿Por qué elegir uno sobre el otro y qué trampas pueden haber? Alguien más se necesita para cerrar esta brecha entre el modelo gemelo / view marcos de Qt y ¿cómo hacerlo?

¿Fue útil?

Solución

QAbstractItemModel (autorizada) -> QAbstractItemView-> QGraphicsScene

Sin lugar a dudas. He hecho esto antes, sí requiere un poco de duplicación (al menos algunos que no pude evitar) pero nada demasiado malo.

Esto también le permite representar los datos en vistas estándar, junto con la escena que es bastante agradable.

Mi mejor consejo sería para almacenar un QHash de QPersistantModelIndex a QGraphicsItem y un QGraphicsScene en el QAbstractItemView se crea. Esto le permite ir rápidamente entre Modelo / Vista de la tierra ( QModelIndex ) a Vista gráfica tierra ( QGraphicsItem )

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