模型 - 视图 - 控制器在Qt

时间:2009-06-17 01:44:24

标签: c++ qt model-view-controller qitemdelegate

我或多或少了解MPV的工作原理。 但我没有得到什么课程:

  • QAbstractItemModel
  • QAbstractItemView
  • QAbstractItemDelegate / QItemDelegate

可以帮我吗?

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

1 个答案:

答案 0 :(得分:13)

AbstractItemModel QAbstractItemView QAbstractItemDelegate

来自"Mode/View framework" 这是一个非常强大的应用程序数据部分框架,here是框架的演示文稿。

<强>化QAbstractItemModel

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

<强> QAbstractItemView中

是MVC的视图的基类。具有视图/选择部分的全局接口,它负责Observer部分。你不必担心观察者模式,框架会为你做这件事。

<强> QAbstractItemDelegate

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


QGraphicsScene / QGraphicsView

来自"The Graphics View Framework"独立于模型/视图框架。
这也是图形部分非常强大的框架。

  

场景

     

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

     

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

     

视图

     

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


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

  • 添加 QAbstractItemView::rowsInserted
  • 删除 QAbstractItemView::rowsAboutToBeRemoved
  • 更改 QAbstractItemView::dataChanged

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