QT学习笔记-模型,视图结构

模型/视图结构概述

  • 数据(data):如数据库的一个数据表或 SQL 查询结果,内存中的一个字符串,或磁盘文件结构等。
  • 模型(model):与数据通信,并为视图组件提供数据接口。
  • 视图(view): 是屏幕上的界面组件,视图从数据模型获得每个数据项的模型索引,通过模型索引获取数据
  • 代理(delegate):在视图与模型之间交互操作时提供的临时编辑器。模型项视图提供数据是单身的,一般仅用于显示。当需要在视图上编辑数据时,代理会为需要编辑的数据提供一个编辑器。

模型,视图和代理之间使用信号与槽通信。

  • 所有基于项(item)的模型类都基于 QAbstractItemModel (其父类是 QObject)
  • 模型只是在内存中临时存储数据,模型的数据来源可以是其他类,数据库等

视图组件:显示数据时,只需要调用视图类的 setModel() 函数

便利类:QListWidgetQTableWidgetQTreeWidget

  • 视图组件不存储数据
  • 便利类则为组件的每个节点或单元格创建一个项用项存储数据,格式设置等。
  • 便利类没有数据模型,将界面与数据绑定了。
  • 便利类缺乏对大型数据源进行灵活处理的能力,适用于小型数据的和显示和编辑。

代理

  • 代理就是在视图组件上为编辑数据提供编辑器
    • 如在表格组件中编辑一个单元格的数据同时,缺省是使用一个 QLineEdit 编辑框。代理负责从数据模型获取相应的数据,然后显示在编辑器里,修改数据后,又将其保存到数据模型中。
  • QAbstractItemDelegate 是所有代理类的基类。

索引

数据模型中存储数据的基本单元都是项(item),每个项有一个年号,一个万列号,还有一个父项

项的角色:在为数据模型的一个项设置数据时,可以赋予其不同项的角色的数据。

QStringListModelQListView

QStringListModel 是处理字符串列表的模型类,其实例可以作为 QListView 组件的数据模型。这两个类结合构成模型/视图结构,可以在界面上显示和编辑字符串列表。

  • setStringList() 将模型的内部字符串列表设置为一组字符串。模型将通知任何附着的视图其基础数据已更改。
  • 提供编辑和修改字符串列表数据的函数,如 insertRows()removeRows()setData()

自定义代理

  • 在模型/视图结构中,代理的作用就是在视图组件进入编辑状态编辑某个项时,提供一个临时的编辑器用于数据编辑,默认的代理编辑器是 QLIneEdit 编辑框