Model/View结构(整理自<Qt5.9 C++开发指南>)

数据模型

数据不仅可以存储在数据模型中,数据可以是其他类,文件,数据库或任何数据源.

视图组件

那些带View的类; 在显示数据时,调用setModel()函数,为自己设置一个数据模型,实现组件和数据之间的交互.一个数据模型可以同时在多个视图组件中显示数据. 视图组件类的数据采用单独的数据模型,视图组件本身不存储数据. 而便利类,就是那些Widget类,为组件的每个节点或单元格创建一个项item,用项来存储数据,格式设置等,这样界面和数据绑定了,这种类只能使用与小型数据

代理

代理是在视图组件上为编辑数据提供编辑器,缺省的使用QLineEdit编辑器.QStyledItemDelegate是Qt的视图组件缺省使用的代理类.如果只输入整型数,使用QSpinBox更恰当;如果从把列表中选择数据,使用QComboBox更好,这时需要从QStyledItemDelegate继承.
在Model/View中,数据模型为视图组件和代理提供存取数据的标准接口.所有的数据模型类都是从QAbstractItemModel继承而来,不管底层的数据结构怎么组织数据,QAbstractItemModel的子类都以 表格 的层次结构来表示数据.

Model/View的一些概念.

不管数据模型的表现形式是怎样的,它存储数据的基本单元都是项(item),每个项有一个行号,列号和父项.
为了保证数据的表示和数据存储方式隔离,数据模型中引入了模型索引的概念,通过数据模型存取的每个数据都有一个模型索引,组件和代理都通过模型索引来获取数据.QModelIndex下的对象时临时的,如果要用持久性的模型索引,则要使用QPersisentModelIndex类.

原文地址:https://www.cnblogs.com/Stephen-Qin/p/13715048.html