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.