我或多或少地了解 MPV 的工作原理。但我不知道什么课程:
QAbstractItemModel
QAbstractItemView
QAbstractItemDelegate
/QItemDelegate
可以为我做吗?
如果这是相关的,我正在使用
QGraphicsScene
/QGraphicsView
与用户可以交互的一些元素(游戏板的视觉表示),而交互逻辑(游戏规则)被封装在其他类中。
我或多或少地了解 MPV 的工作原理。但我不知道什么课程:
QAbstractItemModel
QAbstractItemView
QAbstractItemDelegate
/QItemDelegate
可以为我做吗?
如果这是相关的,我正在使用
QGraphicsScene
/QGraphicsView
与用户可以交互的一些元素(游戏板的视觉表示),而交互逻辑(游戏规则)被封装在其他类中。
来自“模式/视图框架”
这是一个非常强大的框架,用于您的应用程序的数据部分,这里是该框架的介绍。
QAbstractItemModel
是MVC 模型的基类。具有用于访问和更改数据的全局接口,并负责 Observable 部分。
QAbstractItemView
是MVC 视图的基类。具有视图/选择部分的全局接口,它负责观察者部分。您不必担心观察者模式,框架会为您完成。
QAbstractItemDelegate
是MVC 控制器的基类。
是绘画,编辑元素的策略模式,......
来自“图形视图框架”并且独立于模型/视图框架。
这也是一个非常强大的图形部分框架。
现场
QGraphicsScene 提供了 Graphics View 场景。场景有以下职责:
为管理大量项目提供快速接口向每个项目传播事件管理项目状态,例如选择和焦点处理提供未转换的渲染功能;主要用于印刷
风景
QGraphicsView 提供视图小部件,它可视化场景的内容。您可以将多个视图附加到同一个场景,以便为同一数据集提供多个视口
如果您希望模型在 QGraphicsView 中可见,则必须基于 QAbstractItemView 编写自己的视图。
将 QGraphicsView 作为视口小部件QAbstractScrollArea::setViewport(QWidget * widget))
,然后您可以
QAbstractItemView::rowsInserted
,QAbstractItemView::rowsAboutToBeRemoved
QAbstractItemView::dataChanged
场景中的物品。不要忘记处理重置布局更改事件。