Modello - Visualizza - Controller in Qt
-
05-07-2019 - |
Domanda
Capisco più o meno come funziona MPV. Ma non capisco quali classi:
-
QAbstractItemModel
-
QAbstractItemView
-
QAbstractItemDelegate
/QItemDelegate
Puoi fare per me?
Se questo è rilevante, sto usando
QGraphicsScene
/ QGraphicsView
con alcuni elementi (rappresentazione visiva del tabellone) con cui l'utente può interagire mentre la logica di interazione (regole del gioco) viene incapsulata in un'altra classe.
Soluzione
AbstractItemModel QAbstractItemView QAbstractItemDelegate
Provengono dal " Mode / View framework "
Questo è un framework molto potente per la parte di dati della tua applicazione, qui è una presentazione di il framework.
QAbstractItemModel
È la classe base per il modello di MVC . Ha un'interfaccia globale per l'accesso e la modifica dei dati e si occupa della parte osservabile.
QAbstractItemView
È la classe base per la visualizzazione dell'MVC . Ha un'interfaccia aglobal per la parte vista / selezioni e si occupa della parte Observer. Non devi preoccuparti del modello di osservatore, il framework lo fa per te.
QAbstractItemDelegate
È la classe base per il controller di MVC .
È il modello strategico per dipingere, modificare gli elementi, ...
QGraphicsScene / QGraphicsView
Sono del " The Graphics View Framework " ed è < strong> indipendente dal framework Model / View.
Questo è anche un framework molto potente per la parte grafica.
La scena
QGraphicsScene fornisce la grafica Vedi scena. La scena ha il seguenti responsabilità:
Fornendo un'interfaccia veloce per gestire un gran numero di articoli Propagare eventi per ogni oggetto Gestione dello stato degli articoli, come la selezione e gestione della messa a fuoco funzionalità di rendering non trasformato; principalmente per la stampa
La vista
QGraphicsView fornisce la vista widget, che visualizza i contenuti di una scena. Puoi allegarne diversi vista sulla stessa scena, per fornire più finestre negli stessi dati set
Se si desidera che un modello sia visibile in un QGraphicsView, è necessario scrivere la propria vista in base al QAbstractItemView.
Prendi un QGraphicsView come widget di visualizzazione porta QAbstractScrollArea :: setViewport (widget QWidget *)
e poi puoi
- aggiungi
QAbstractItemView :: rowsInserted
, - rimuovi
QAbstractItemView::rowsAboutToBeRemoved
- e modifica
QAbstractItemView::dataChanged
gli oggetti nella scena. Non dimenticare di occuparti della reimpostazione degli eventi di modifica del layout.