Вопрос

Я более-менее понимаю, как работает 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

предметы на сцене.Не забудьте позаботиться о сбросе событий изменения макета.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top