Modelo - Vista - Controlador en Qt
-
05-07-2019 - |
Pregunta
Entiendo más o menos cómo funciona el MPV. Pero no entiendo qué clases:
QAbstractItemModel
QAbstractItemView
-
QAbstractItemDelegate
/QItemDelegate
¿Se puede hacer por mí?
Si eso es relevante, estoy usando
QGraphicsScene
/ QGraphicsView
con algunos elementos (representación visual del tablero de juego) con los que el usuario puede interactuar, mientras que la lógica de interacción (reglas del juego) está encapsulada en otra clase.
Solución
AbstractItemModel QAbstractItemView QAbstractItemDelegate
Son de " Marco de modo / vista "
Este es un marco muy poderoso para la parte de datos de su aplicación, aquí es una presentación de El marco.
QAbstractItemModel
Es la clase base para el modelo de MVC . Tiene una interfaz global para acceder y alterar los datos y se ocupa de la parte observable.
QAbstractItemView
Es la clase base para la vista del MVC . Tiene una interfaz global para la parte de vistas / selecciones y se encarga de la parte de observador. No tiene que preocuparse por el patrón de observador, el marco lo hace por usted.
QAbstractItemDelegate
Es la clase base para el controlador del MVC .
Es el patrón de estrategia para pintar, editar los elementos, ...
QGraphicsScene / QGraphicsView
Son de " El Marco de Vista Gráfica " y es < fuerte> independiente del marco Modelo / Vista.
Este es también un marco muy poderoso para la parte de gráficos.
La escena
QGraphicsScene proporciona los gráficos Ver escena La escena tiene la siguientes responsabilidades:
Proporcionar una interfaz rápida para gestionando una gran cantidad de artículos Propagando eventos a cada elemento. Gestión del estado del elemento, como la selección y manejo de enfoque Proporcionar funcionalidad de renderización no transformada; principalmente para la impresión
La vista
QGraphicsView proporciona la vista Widget, que visualiza los contenidos. de una escena. Puede adjuntar varios vistas a la misma escena, para proporcionar varias vistas en los mismos datos conjunto
Si desea que un modelo sea visible en un QGraphicsView, tendrá que escribir su propia vista basada en el QAbstractItemView.
Tome un widget de QGraphicsView como puerto de vista QAbstractScrollArea :: setViewport (QWidget * widget))
y luego podrá
- agregar
QAbstractItemView :: rowsInserted
, - eliminar
QAbstractItemView::rowsAboutToBeRemoved
- y cambiar
QAbstractItemView::dataChanged
los elementos en la escena. No te olvides de encargarte de restablecer y cambiar los eventos de cambio.