12

我或多或少地了解 MPV 的工作原理。但我不知道什么课程:

  • QAbstractItemModel
  • QAbstractItemView
  • QAbstractItemDelegate/QItemDelegate

可以为我做吗?

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

4

1 回答 1

13

AbstractItemModel QAbstractItemView QAbstractItemDelegate

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

QAbstractItemModel

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

QAbstractItemView

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

QAbstractItemDelegate

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


QGraphicsScene / QGraphicsView

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

现场

QGraphicsScene 提供了 Graphics View 场景。场景有以下职责:

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

风景

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


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

  • 添加 QAbstractItemView::rowsInserted,
  • 消除 QAbstractItemView::rowsAboutToBeRemoved
  • 改变 QAbstractItemView::dataChanged

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

于 2009-06-17T07:29:21.900 回答