一.模型视图介绍
1.Model/View(模型/视图结构) 视图(View)是显示和编辑数据的界面组件,
模型(Model)是视图和原始数据之间的接口
2.视图组件有:QListView QTreeView QTableView,QColumnView,QHeaderView
模型组件有:QStringListModel,QStandardItemModel
3.Model/View结构
视图或视图组件(View):视图从数据模型获取每个数据项的模型索引,通过模型索引获取数据,然后为界面组件提供显示数据。
模型或模型数据与实际数据通信,并为视图组件提供数据。
代理(Delegate):可以让用户定制数据的界面显示和编辑方式。
模型,视图和代理之间使用信号和槽通信。
数据模型:所有基于项数据(Item data)的数据模型(Model)都是基于QAbstractItemModel类的)此类定义视图组件和代理存取数据的接口。
QSqlRelationTableMode:关系型数据表
QSqlTableModel:数据库的一个数据表
QSqlQueryModel:QSqlQueryModel封装了执行SELECT语句从数据库查询数据的功能,但是QSqlQueryModel只能作为只读数据源使用,不可以编辑数据
二.模型视图的优点
1.一个Model可以映射多个View,可以以不同的方式查看数据同一份数据
2.如果底层数据源的存储改变了,只需要处理Model
给一个例子显示文件夹目录:
m_fileModel = new QFileSystemModel(this);
m_fileModel->setRootPath(QDir::currentPath());
ui->treeView->setModel(m_fileModel);
QFileSystemModel *m_fileModel;//定义数据模型变量
委托(Delegates)
委托类负责显示数据项,创建与管理编辑器对象,以对数据项进行编辑。视图负责绘制整体结构,不会绘制每个数据项。每个视图对象会指向一个默认的委托对象。
一.模型(Model)
为了将以上(List,Table,Tree)三种结构统一起来,Model/View框架引入了“不可见根”的概念。对于列表模型,所有行的数据项都是这个不可见根的子节点。对于表格模型,所有行、所有列的数据项都是这个不可见根的子节点。对于树模型,位于最顶层的那些数据项(可能包含若干行、若行列)是这个不可见根的子节点。
对于列表或者表格结构的模型,视图对象可以简单地使用行号,列号来访问模型中的某个数据项。对于树状结构的模型,需要使用"索引"来定位也给数据项。
1.角色与数据子项
每个数据项会存放多个数据子项。其中一些是应用程序本身需要处理的数据,另外一些是Model/View框架中其他部分(比如视图对象、委托对象等)需要处理的。视图对象展示的内容为DisplayRole角色。
通用的角色以及对应数据子项的功能与类型
和数据项外观相关的角色
2.索引
QModelIndex含有的信息:1.行号,列号 2.一个指针 指向数据集中的一个数据项