Model-View-контроллер в Qt

Я более или менее понимаю, как работает MPV. Но я не понимаю, какие классы:

  • QAbstractItemModel
  • QAbstractItemView
  • QAbstractItemDelegate / QItemDelegate

можете сделать для меня?

если это актуально, я использую QGraphicsScene / QGraphicsView С некоторыми элементами (визуальное представление игрового поля), с которыми пользователь может взаимодействовать, в то время как логика взаимодействия (правила игры) инкапсулируются в другой класс.

1 ответов


AbstractItemModel QAbstractItemView QAbstractItemDelegate

С "рамочный режим" / "просмотреть"
Это очень мощный фреймворк для части данных вашего приложения, здесь презентация рамках.

помощью переопределенной QAbstractItemModel

является базовым классом для модель MVC. Имеет глобальный интерфейс для доступа и изменения данных и принимает забота о наблюдаемой части.

QAbstractItemView

является базовым классом для вид MVC. Имеет аглобальный интерфейс для части view/selections и заботится о части Observer. Вам не нужно беспокоиться о шаблоне наблюдателя, структура делает это за вас.

QAbstractItemDelegate

является базовым классом для контроллер MVC.
Стратегия шаблон для рисования, редактирования элементов ...


На Qgraphicsscene / Дать QGraphicsView

С "Рамки Графического Представления" и независимо от структуры модели / представления.
это также очень мощный фреймворк для графической части.

На Сцене

QGraphicsScene предоставляет графику Вид сцены. На сцене следующий обязанности:

обеспечивать быстрый интерфейс для управление большим количеством элементов Распространение событий на каждый элемент Управление состоянием элемента, например selection и фокус регулируя обеспечивать нетрансформированная функциональность рендеринга; в основном для печати

Вид

QGraphicsView предоставляет представление виджет, который визуализирует содержание сцены. Можно прикрепить несколько виды на ту же сцену, чтобы обеспечить несколько видовых экранов в одних и тех же данных set


если вы хотите, чтобы модель была видна в QGraphicsView, вам придется написать собственное представление на основе QAbstractItemView.
Возьмите QGraphicsView в качестве виджета порта просмотра QAbstractScrollArea::setViewport(QWidget * widget)) и тогда вы можете

  • добавить QAbstractItemView::rowsInserted,
  • удалить QAbstractItemView::rowsAboutToBeRemoved
  • и изменить QAbstractItemView::dataChanged

в предметы на сцене. Не забудьте позаботиться о событиях reset an layout change.