C++ Qt中的模型-视图-控制器

C++ Qt中的模型-视图-控制器,c++,qt,model-view-controller,qitemdelegate,C++,Qt,Model View Controller,Qitemdelegate,我或多或少了解MPV是如何工作的。 但我没有得到什么课程: qabstractemmodel qabstractemview qabstractemdelegate/QItemDelegate 你能帮我吗 如果这是相关的,我正在使用 qgraphicscene/QGraphicsView带有一些元素(游戏板的可视化表示),用户可以与之交互,而交互逻辑(游戏规则)封装在其他类中。AbstractItemModel QAbstractItemView QAbstractItemDelegate

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

  • qabstractemmodel
  • qabstractemview
  • qabstractemdelegate
    /
    QItemDelegate
你能帮我吗

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

AbstractItemModel QAbstractItemView QAbstractItemDelegate 来自
这是一个非常强大的框架,用于应用程序的数据部分,是该框架的演示

qabstractemmodel

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

qabstractemview

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

qabstractemdelegate

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


qgraphicscene/QGraphicsView 来自,并且独立于模型/视图框架。

这也是一个非常强大的图形部分框架

现场

QGraphicscene提供图形 查看场景。这一幕有点夸张 以下职责:

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

视图

QGraphicsView提供了该视图 窗口小部件,用于可视化内容 一个场景。你可以附上几个 同一场景的视图,以提供 将多个视口合并到同一数据中 设置


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

  • 添加
  • 删除
    qabstractemview::rowsAboutToBeRemoved
  • 更改
    qabstractemview::dataChanged

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

QAbstractItemModel实际上提供了一个外观,用于使模型适应视图所需的接口,而不必表示模型本身。具体模型可以是真实模型(QStandarditemModel)、代理(QSortFilterProxyModel),也可以是外观(QSqlTableModel)