Qt Model/View结构学习导图

Qt的MV模型,源于但又不同于MVC,其使用的MVD。Model和View的含义未发生变化,通过Delegate(委托或称为代理)来自定义每个条目的显示和编辑方式。

下面是我总结的Qt的MV结构的类间关系图。Qt的MV结构就是这样实现的,我们通过继承重写这些接口类,就可以很方便地将项目中的数据和视图分离。
在这里插入图片描述

MODEL/VIEW

  1. QAbstractItemView
    视图从模型中获取模型索引,用其来表示数据项。用户与显示的项目交互时,视图发出信号来提供交互信息。含有槽dataChanged()。
    1.1 QColumnView
    1.2 QHeaderView
    1.3 QListView
    1.3.1 QListWidget
    1.4 QTableView
    1.4.1 QTableWidget
    1.5 QTreeView
    1.5.1 QTreeWidget
  2. QAbstractItemModel
    提供标准接口供视图和委托访问其内部数据源。其子类会以层次化结构来表示数据,这个结构中包含了数据项表。模型中数据改变会通过信号槽机制通知视图。 注意,这是个接口类,其纯虚函数有:index(), parent(), rowCount(), columnCount(), data()。数据改变将发送dataChanged()信号
    2.1 QStandardItemModel
    2.1.1 QStandardItem
    2.2 QAbstractListModel
    如需定制,所需的数据结构可以表示为项目列表时,可以子类化该类。注意,这是个接口类,其剩下的纯虚函数还有:rowCount(), data(),需要重写。
    1> 重写rowCount(), data()可以实现只读模型
    2> 重写headerData()可以定制标头
    3> 重写index(), parant()可以创建具有层次结构的模型
    4> 重写flags(), setData()可以实现编辑模型
    5> 重写insertRows(), removeRows()可以实现插入和删除行

    2.2.1 QStringListModel
    2.2.1.1 QStringList
    2.3 QAbstractTableModel
    子类化时需要实现 rowCount(),columnCount(),和data().
    2.3.1 QSqlQueryModel
    2.3.1.1 QSqlTableModel
    2.4 QFileSystemModel
  3. QAbstractItemDelegate
    委托渲染数据项,编辑项目时,委托使用模型索引直接与模型进行通信。编辑项目时,委托发出信号,告知模型和视图编辑器的状态。虽然视图也可以直接处理用户输入,但委托可以提供更灵活的交互,例如可以渲染视图中的个别特殊控件项目来和用户交互。 其纯虚函数有:paint(), sizeHint()
    3.1 QItemDelegate
    简单的基于部件的委托可以通过子类化该类来实现。委托的编辑器可以通过两种方式实现,一种是使用部件来管理编辑过程,另一种是直接处理事件。
    3.2 QStyledItemDelegate
    与QItemDelegate的差别在于其可以使用当前的样式表设置来绘制组件。 自定义委托时,推荐子类化这个类,然后必须实现下面4个函数:
    createEditor()创建用于编辑模型数据的widget组件如QComboBox,
    setEditorData()从模型获取数据供widget编辑,
    setModelData()更新数据到模型,
    updateEditorGeometry()给组件设置一个合适大小
  4. QModelIndex
    模型索引是为了确保数据的表示和获取分离。视图和委托都使用索引来请求数据项并显示。模型索引是对一块数据的临时引用,可以用来检索和修改模型中的数据。获取一个数据项的模型索引,必须指定模型的3个属性:行号,列号和父项的模型索引。
  5. QItemSelectionModel
    5.1 QItemSelection
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值