问题 模型 - 视图 - 控制器在Qt


我或多或少了解MPV是如何工作的。 但我没有得到什么课:

  • QAbstractItemModel
  • QAbstractItemView
  • QAbstractItemDelegate / QItemDelegate

可以帮我吗?

如果这是相关的,我正在使用 QGraphicsScene / QGraphicsView 使用一些元素(游戏板的可视化表示),用户可以与交互逻辑(游戏规则)封装在其他类中时进行交互。


5504
2018-06-17 01:44


起源



答案:


AbstractItemModel QAbstractItemView QAbstractItemDelegate

来自 “模式/视图框架”
这是应用程序数据部分的一个非常强大的框架, 这里 是框架的介绍。

化QAbstractItemModel

是基类 MVC的模型。具有访问和更改数据的全局接口,并负责Observable部分。

QAbstractItemView中

是基类 MVC的观点。具有视图/选择部分的全局界面,它负责观察者部分。您不必担心观察者模式,框架会为您完成。

QAbstractItemDelegate

是基类 MVC的控制器
是绘制,编辑元素的策略模式,......


QGraphicsScene / QGraphicsView

来自 “图形视图框架” 并且是 独立于Model / View框架。
这也是图形部分非常强大的框架。

现场

QGraphicsScene提供图形   查看场景。现场有   以下职责:

提供快速接口   管理大量物品   将事件传播到每个项目   管理项目状态,例如选择   和焦点处理提供   未转换的渲染功能;   主要用于印刷

风景

QGraphicsView提供视图   小部件,可视化内容   一个场景。你可以附上几个   观点到同一场景,提供   几个视口进入相同的数据   组


如果您希望模型在QGraphicsView中可见,则必须基于QAbstractItemView编写自己的视图。
将QGraphicsView作为视图端口小部件 QAbstractScrollArea::setViewport(QWidget * widget))  然后你就可以了

  •   QAbstractItemView::rowsInserted
  • 去掉  QAbstractItemView::rowsAboutToBeRemoved
  • 更改  QAbstractItemView::dataChanged

场景中的项目。不要忘记处理重置布局更改事件。


13
2018-06-17 07:29



QAbstractItemModel提供了一个实际的外观,用于使模型适应视图所需的接口,而不必代表模型本身。 - Cătălin Pitiș
具体模型可以是真实模型(QStandarditemModel),代理(QSortFilterProxyModel),也可以是外观(QSqlTableModel) - TimW


答案:


AbstractItemModel QAbstractItemView QAbstractItemDelegate

来自 “模式/视图框架”
这是应用程序数据部分的一个非常强大的框架, 这里 是框架的介绍。

化QAbstractItemModel

是基类 MVC的模型。具有访问和更改数据的全局接口,并负责Observable部分。

QAbstractItemView中

是基类 MVC的观点。具有视图/选择部分的全局界面,它负责观察者部分。您不必担心观察者模式,框架会为您完成。

QAbstractItemDelegate

是基类 MVC的控制器
是绘制,编辑元素的策略模式,......


QGraphicsScene / QGraphicsView

来自 “图形视图框架” 并且是 独立于Model / View框架。
这也是图形部分非常强大的框架。

现场

QGraphicsScene提供图形   查看场景。现场有   以下职责:

提供快速接口   管理大量物品   将事件传播到每个项目   管理项目状态,例如选择   和焦点处理提供   未转换的渲染功能;   主要用于印刷

风景

QGraphicsView提供视图   小部件,可视化内容   一个场景。你可以附上几个   观点到同一场景,提供   几个视口进入相同的数据   组


如果您希望模型在QGraphicsView中可见,则必须基于QAbstractItemView编写自己的视图。
将QGraphicsView作为视图端口小部件 QAbstractScrollArea::setViewport(QWidget * widget))  然后你就可以了

  •   QAbstractItemView::rowsInserted
  • 去掉  QAbstractItemView::rowsAboutToBeRemoved
  • 更改  QAbstractItemView::dataChanged

场景中的项目。不要忘记处理重置布局更改事件。


13
2018-06-17 07:29



QAbstractItemModel提供了一个实际的外观,用于使模型适应视图所需的接口,而不必代表模型本身。 - Cătălin Pitiș
具体模型可以是真实模型(QStandarditemModel),代理(QSortFilterProxyModel),也可以是外观(QSqlTableModel) - TimW