【问题标题】:Model - View - Controller in QtQt 中的模型 - 视图 - 控制器
【发布时间】:2009-06-17 01:44:23
【问题描述】:

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

  • QAbstractItemModel
  • QAbstractItemView
  • QAbstractItemDelegate / QItemDelegate

可以帮我吗?

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

【问题讨论】:

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


    【解决方案1】:

    AbstractItemModel QAbstractItemView QAbstractItemDelegate

    来自"Mode/View framework"
    这是一个非常强大的框架,用于您的应用程序的数据部分,here 是该框架的介绍。

    QAbstractItemModel

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

    QAbstractItemView

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

    QAbstractItemDelegate

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


    QGraphicsScene / QGraphicsView

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

    场景

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

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

    观点

    QGraphicsView 提供视图 小部件,可视化内容 的一个场景。你可以附上几个 对同一场景的看法,以提供 同一数据的多个视口 设置


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

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

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

    【讨论】:

    • QAbstractItemModel 实际上提供了一个外观,用于使模型适应视图所需的界面,并且不必代表模型本身。
    • 具体模型可以是真实模型(QStandarditemModel)、代理(QSortFilterProxyModel)也可以是门面(QSqlTableModel)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    相关资源
    最近更新 更多