我大概了解MPV的工作原理,但我不明白以下类:
QAbstractItemModel
QAbstractItemView
QAbstractItemDelegate
/QItemDelegate
可以为我做什么吗?
如果相关,我正在使用QGraphicsScene
/QGraphicsView
与一些元素(游戏棋盘的视觉表示)用户可以与之交互,而交互逻辑(游戏规则)则封装在其他类中。
我大概了解MPV的工作原理,但我不明白以下类:
QAbstractItemModel
QAbstractItemView
QAbstractItemDelegate
/ QItemDelegate
可以为我做什么吗?
如果相关,我正在使用QGraphicsScene
/QGraphicsView
与一些元素(游戏棋盘的视觉表示)用户可以与之交互,而交互逻辑(游戏规则)则封装在其他类中。
这些类来自于 “模型/视图框架”。
这是一个非常强大的数据部分应用程序框架,这里 是关于该框架的演示。
QAbstractItemModel
是MVC中模型的基类。提供了访问和更改数据的全局接口,并处理可观察部分。
QAbstractItemView
是MVC中视图的基类。提供了视图/选择部分的全局接口,并处理观察者部分。您不必担心观察者模式,框架为您处理。
QAbstractItemDelegate
是MVC中控制器的基类。它对于绘制、编辑元素等是策略模式。
这些类来自于 “图形视图框架”,并且独立于模型/视图框架。
这也是一个非常强大的图形部分应用程序框架。
若要在 QGraphicsView 中显示模型,您需要基于 QAbstractItemView 编写自己的视图。场景
QGraphicsScene提供了图形视图场景。场景具有以下职责:
提供快速的接口来管理大量的项,将事件传播到每个项,管理项状态,如选择和焦点处理,提供未转换的渲染功能,主要用于打印
视图
QGraphicsView提供了视图小部件,可视化内容。
QAbstractScrollArea::setViewport(QWidget * widget))
,然后您可以:
QAbstractItemView::rowsInserted
QAbstractItemView::rowsAboutToBeRemoved
QAbstractItemView::dataChanged
场景中的项。不要忘记处理重置和布局更改事件。