模型 - 视图 - 控制器在Qt

Łuk*_*Lew 12 c++ model-view-controller qt qitemdelegate

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

  • QAbstractItemModel
  • QAbstractItemView
  • QAbstractItemDelegate/QItemDelegate

可以帮我吗?

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

Tim*_*imW 13

AbstractItemModel QAbstractItemView QAbstractItemDelegate

来自"模式/视图框架"
这是一个非常强大的框架,用于应用程序的数据部分,这里是框架的演示.

化QAbstractItemModel

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

QAbstractItemView中

MVC视图的基类.具有视图/选择部分的全局接口,它负责Observer部分.您不必担心观察者模式,框架会为您完成.

QAbstractItemDelegate

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


QGraphicsScene/QGraphicsView

来自"图形视图框架"并且独立于模型/视图框架.
这也是图形部分非常强大的框架.

现场

QGraphicsScene提供了Graphics View场景.该场景具有以下职责:

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

风景

QGraphicsView提供视图小部件,可视化场景的内容.您可以将多个视图附加到同一场景,以将多个视口提供到同一数据集中


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

  • 添加 QAbstractItemView::rowsInserted,
  • 去掉 QAbstractItemView::rowsAboutToBeRemoved
  • 改变 QAbstractItemView::dataChanged

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

  • QAbstractItemModel提供了一个实际的外观,用于使模型适应视图所需的接口,而不必代表模型本身. (3认同)