Модель – Представление – Контроллер в Qt
-
05-07-2019 - |
Вопрос
Я более-менее понимаю, как работает MPV.Но я не понимаю, какие классы:
QAbstractItemModel
QAbstractItemView
QAbstractItemDelegate
/QItemDelegate
Может сделать для меня?
Если это актуально, я используюQGraphicsScene
/ QGraphicsView
с некоторыми элементами (визуальное представление игрового поля), с которыми пользователь может взаимодействовать, в то время как логика взаимодействия (правила игры) инкапсулирована в другом классе.
Решение
AbstractItemModel QAbstractItemView QAbstractItemDelegate
Из «Структура режима/представления»
Это очень мощная платформа для части данных вашего приложения. здесь представляет собой презентацию фреймворка.
QAbstractItemModel
Является базовым классом для модель MVC.Имеет глобальный интерфейс для доступа и изменения данных и заботится о наблюдаемой части.
QAbstractItemView
Является базовым классом для вид на MVC.Имеет глобальный интерфейс для части просмотра/выбора и заботится о части наблюдателя.Вам не нужно беспокоиться о шаблоне наблюдателя, фреймворк сделает это за вас.
QAbstractItemDelegate
Является базовым классом для контроллер MVC.
Это шаблон-стратегия для рисования, редактирования элементов,...
QGraphicsScene/QGraphicsView
Из «Структура графического представления» и является независимо от структуры модели/представления.
Это также очень мощный фреймворк для графической части.
Сцена
QGraphicsScene предоставляет Графика Посмотреть сцену.Сцена имеет следующие обязанности:
Обеспечение быстрого интерфейса для управление большим количеством предметов Распространение событий на каждый элемент Управление состоянием элемента, таким как выделение и обработка фокуса Обеспечивая неотредактированный функционал рендеринга;в основном для печати
Вид
QGraphicsView предоставляет представление виджет, который визуализирует содержимое сцены.Вы можете прикрепить несколько взгляды на ту же сцену, чтобы обеспечить несколько представлений в одни и те же данные набор
Если вы хотите, чтобы модель была видна в QGraphicsView, вам придется написать собственное представление на основе QAbstractItemView.
Возьмите QGraphicsView в качестве виджета порта просмотра QAbstractScrollArea::setViewport(QWidget * widget))
и тогда ты сможешь
- добавлять
QAbstractItemView::rowsInserted
, - удалять
QAbstractItemView::rowsAboutToBeRemoved
- и изменять
QAbstractItemView::dataChanged
предметы на сцене.Не забудьте позаботиться о сбросе событий изменения макета.