口,在某些情况下,还提供了缺省的实现。抽象类意味着需要子类化以提供完整的其他组件希
望的功能。这也允许实现定制的组件。models,views,delegates 之间通过信号,槽机制来进
行通讯:
从 model 发出的信号通知 view 数据源中的数据发生了改变。
从 view 发出的信号提供了有关被显示的数据项与用户交互的信息。
从 delegate 发生的信号被用于在编辑时通知 model 和 view 关于当前编辑器的状态信息。
Models
所有的 item models 都基于 QAbstractItemModel 类,这个类定义了用于 views 和
delegates 访问数据的接口。
数据本身不必存储在 model,数据可被置于一个数据结构或另外的类,文件,数据库,或别的
程序组件中。
关于 model 的基本概念在 Model Classes 部分中描述。
QAbstractItemModel 提供给数据一个接口,它非常灵活,基本满足 views 的需要,无论数
据用以下任何样的形式
表现,如 tables,lists,trees。然而,当你重新实现一个 model 时,如果它基于 table 或 list
形式的数据结构,最好从 QAbstractListModel,QAbstractTableModel 开始做起,因为它们
提供了适当的常规功能的缺省实现。这些类可以被子类化以支持特殊的定制需求。子类化
model 的过程在 Create New Model 部分讨论
QT 提供了一些现成的 models 用于处理数据项:
QStringListModel 用于存储简单的 QString 列表。
QStandardItemModel 管理复杂的树型结构数据项,每项都可以包含任意数据。
QDirModel 提供本地文件系统中的文件与目录信息。
QSqlQueryModel, QSqlTableModel,QSqlRelationTableModel 用来访问数据库。
假如这些标准 Model 不满足你的需要,你应该子类化
QAbstractItemModel,QAbstractListModel 或是
QAbstractTableModel 来定制。
Views
不同的 view 都完整实现了各自的功能:QListView 把数据显示为一个列表,QTableView 把
Model 中的数据以 table 的形式表现,QTreeView 用具有层次结构的列表来显示 model 中的
数据。这些类都基于 QAbstractItemView 抽象基类,尽管这些类都是现成的,完整的进行了
实现,但它们都可以用于子类化以便满足定制需求。
Delegates
QAbstractItemDelegate 是 model/view 架构中的用于 delegate 的抽象基类。缺省的
delegate 实现在 QItemDelegate 类中提供。它可以用于 Qt 标准 views 的缺省 delegate.
排序
评论0
最新资源