1.model 数据模型都是基于QAbstractItemModel类,数据无需存储在数据模型里,数据可以是其他类,文件、数据库或任何数据源。mode类有 QAbstractListMode、QStringListMode、QStandardItemModel、QAbstractTableMode、QSqlQueryModel、QSqlTableModel、QFileSystemModel。数据模型中存储数据的基本单元都是项(item),每个项有一个行号、一个列号、还有一个父项。列表和表格模式下,所有的项都有一个相同的顶层项。数据模型的存取的每个数据都有一个模型索引(model index),视图组件和代理都是通过模型索引来获取数据。QModelIndex表示模型索引的类。

同时也可以子类化QAbstractItemModel、QAbstractListModel或QAbstractTableModel来创建自定义模型。

函数:

1.Q_INVOKABLE virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const = 0;
2.Q_INVOKABLE virtual QModelIndex parent(const QModelIndex &child) const = 0;
3.Q_INVOKABLE virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const = 0;
4.Q_INVOKABLE virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
5.virtual QMap<int, QVariant> itemData(const QModelIndex &index) const;
 
 

2.视图组件基于QAbstractItemView继承而来,有QListView、QTreeView、QTableView等。而便利类如QlistWidget、Qtreewidget、QtableWidge 是前面3个类的子类,这些便利类没有数据模型,但实际上是用项的方式集成了数据模型的功能,所有便利类只适用小型数据的显示和编辑,缺乏对大型数据的灵活处理。

视图通过setModel函数设置数据模型,视图通过setItemDelegateForColumn或setItemDelegateForRow设置代理。

函数:

1.void setRootIndex(const QModelIndex &index) Q_DECL_OVERRIDE;   //设置视图的根节点

2. virtual void setModel(QAbstractItemModel *model); //设置选择数据模型

3.QAbstractItemModel *model() const;

4.QModelIndex currentIndex() const;

5.QModelIndex rootIndex() const;

6.void setItemDelegateForRow(int row, QAbstractItemDelegate *delegate);
7.void setItemDelegateForColumn(int column, QAbstractItemDelegate *delegate);

信号:
1.void clicked(const QModelIndex &index);

(3)、代理
Qt使用抽象类QAbstractItemDelegate(基类)来描述代理,Qt实现了两个代理类(子类),QStyledItemDelegate和QItemDelegate,这两个委托之中只能使用其中一个,其区别在于QItemDelegate总是使用一种默认的样式绘制数据项,而QStyledItemDelegate使用当前的样式来绘制数据项,通常使用的是QStyledItemDelegate。Qt默认使用QStyledItemDelegate。

4个函数,原型是固定的。需要重新定义,即一般继承QStyledItemDelegate类,在子类重新定义实现。

1.createeditor()函数创建用于编辑模型数据的widget组件,如一个qcombobox组件。

2.seteditordata()从数据模型获取数据,供widget组件进行编辑。

3.setmodeldata()将widget上的数据更新到数据模型。

4.updateeditorgeometry()用于给widget组件设置一个合适的大小。

model、view、delegate 之间的作用关系简单概括如下:

1)model和data相互通信,然后model为view和delegate提供接口。

2)view通过调用model的接口,从model中获取模型索引QModelIndex,通过QModelIndex可以获得data。

3)delegate为view展示data,delegate可以被编辑修改删除。而当在delegate上编辑时,它会用QModelIndex于model通信,通知model更新数据。

4.QFileSystemModel是可访问本机文件系统的数据模型,并且是采用单独的线程获取目录文件结构。需要调用setrootpath设置根目录。而QDirModel也可以获取文件目录和文件,但不是采用单独的线程。一般和qtreeview结合使用

函数:

// QFileSystemModel specific API
1. QModelIndex setRootPath(const QString &path);

5.QStringListModel 用于处理字符串列表的数据模型。一般和qlistView视图结合使用

setstringlist函数初始化数据模型的字符串列表的内容。

stringlist函数返回数据模型内的字符串内容

 1. QStringList stringList() const;    2. void setStringList(const QStringList &strings);

6.QStandardItemModel 是标准的以项数据(item data)为基础的标准数据模型,通常和QTableView结合使用。

QStandardItemModel :每个项是一个QStandardItem类的变量,用于存储项的数据、字体格式、对齐方式等。

常用的函数有:

QStandardItemModel :

1.QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;

2.bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) Q_DECL_OVERRIDE;

3.QStandardItem *itemFromIndex(const QModelIndex &index) const;

4.QModelIndex indexFromItem(const QStandardItem *item) const;

5.void setItem(int row, int column, QStandardItem *item);

6.void setRowCount(int rows);

7.void insertRow(int row, const QList<QStandardItem*> &items);

8.QStandardItem *item(int row, int column = 0) const;

QStandardItem
1.inline QString text() const
{       return qvariant_cast<QString>(data(Qt::DisplayRole));
}
2. inline void setText(const QString &text);
3. explicit QStandardItem(const QString &text);

另外:

QItemSelectionModel:用来跟踪视图组件的单元格选择状态的类。

qt Model/view (模型/视图)相关推荐

  1. Model/View模型视图

    catalog version model 函数 遍历 视图 当前项.选中项 Select SelectionMode SelectionBahavior QItemSelectionModel QT ...

  2. QT Model/View 编程:MVC模型视图编程:实例实现(二)

    目录 样例001:现有模型中使用视图Using views with an existing model 样例002:使用模型索引 样例003:使用模型 样例004:使用模型的多个视图 样例005:委 ...

  3. Qt Model/View(MVD)模型分析

           最近在看Qt的Model/View Framework,在网上搜了搜,好像中文的除了几篇翻译没有什么有价值的文章.E文的除了Qt的官方介绍,其它文章也很少.看到一个老外在blog中写道M ...

  4. (一) Qt Model/View 的简单说明

    目录: (一) Qt Model/View 的简单说明 .预定义模型 (二)使用预定义模型 QstringListModel例子 (三)使用预定义模型QDirModel的例子 (四)Qt实现自定义模型 ...

  5. Qt Model/View编程介绍

    Qt中包含了一系列的项视图类,它们使用model/view的架构去管理数据之间的关系以及它们被展示给用户的方式.这种由这种架构引进的功能分离特性给了开发者很大的灵活性去自定义自己的展示方式,并且提供了 ...

  6. Qt中的模型视图设计模式

    文章目录 1 初探Qt中的模型视图设计模式 2 模型视图中的索引 3 模型中的数据组织方式初探 1 初探Qt中的模型视图设计模式 模型视图设计模式的核心思想: 模型(数据)与视图(显示)相分离. 模型 ...

  7. Qt Model/View 学习(4) - 实现自己的QAbstractTableModel类(支持显示与修改)

    目录 0. 前言 1. Data设计 2. Model类设计 2.1 数据显示与对齐.字体修改 2.2 数据修改 3. 小结 0. 前言 可算到了这一篇了! 上一篇文章中把Qt::ItemDataRo ...

  8. C++Qt开发——Mode View(模型视图)

    Model/View(模型/视图)结构 简介 Model/View(模型/视图)结构是 Qt 中用界面组件显示与编辑数据的一种结构,视图(View)是显示和编辑数据的界面组件,模型(Model)是视图 ...

  9. QT学习:模型/视图基本概念

    Qt的模型/视图结构分为三部分:模型(Model).视图(View)和代理(Delegate).其中,模型与数据源通信,并为其他部件提供接口:而视图从模型中获得用来引用数据条目的模型索引(Model ...

  10. Qt Model/View教程

    修正版已转移到 Qt中文文档 目录 修正版已转移到 [Qt中文文档](https://www.qtdoc.cn/Src/M/Model_View_Tutorial/Model_View_Tutoria ...

最新文章

  1. 【数理逻辑】谓词逻辑 ( 谓词逻辑基本等值式 | 消除量词等值式 | 量词否定等值式 | 量词辖域收缩扩张等值式 | 量词分配等值式 )
  2. pyecharts学习(part2)--pyecharts Line
  3. Sentinel底层LongAdder的计数实现
  4. Hive Union操作中的隐式转换
  5. 注册(四)之删除绑定
  6. Windows10 安装 protobuf
  7. Android模仿新浪微博(写微博界面)
  8. HTML,CSS,font-family: 中文字体的英文名称 (宋体 微软雅黑 的英文写法)
  9. 【语音定时播报系统】基于树莓派+百度语音合成打造语音定时播报系统
  10. [复变函数]第20堂课 5.4 整函数与亚纯函数的概念
  11. NTC热敏电阻的时间常数
  12. 计算机无法识别u盘,电脑无法识别U盘怎么办?简单搞定
  13. Spring注解开发配置
  14. fflush函数有什么作用?
  15. 虚拟现实技术在医疗领域应用的发展建议
  16. 微信小程序—相关配置
  17. 10、Kafka 消息订阅系统
  18. POS打印机制造商容大科技筹备A股上市,许开明合计持股约90%
  19. R语言中的数学计算(转载)
  20. 使用tabula-java解析pdf的表格生成csv,再用opencsv读取csv

热门文章

  1. linux 基础命令(三)
  2. postgres stat 记事
  3. Python 2.6 升级到 2.7
  4. cacti安装配置与添加客户端
  5. C#正则表达式通过HTML提取网页中的图片src
  6. T3500通过PXE克隆报“Unable to Control A20 Line XMS Driver not installed”
  7. hadoop集群重启
  8. java oracle spool,oracle之spool详细使用总结
  9. C# web 后台页面间的跳转
  10. python基础运用_python基础----python的使用(三)