QModelIndex 不止一个构造函数,但是除了无参数的构造函数外,其他的构造函数(能创造出有效索引的构造函数)都被设置为私有。
QAbstractItemModel 是 QModelIndex 的友元,它可以访问这些私有构造函数来创建出有效的索引。
所有模型都是 QAbstractItemModel 的子类(或间接子类),它们继承了QAbstractItemModel的createIndex函数。
22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
QStandardItemModel
可以作为QListView、QTableView、QTreeView的标准model。管理复杂的树型结构数据项,每个数据项可以包含任意的数据。
本模型具有内置的Item类:QStandardItem类,提供了一个用于QStandardItemModel类的项。Item通常包含文本,图标或复选框。每个Item都可以具有自己的背景刷,并使用setbackground()函数设置。当前的背景刷可以使用background()找到。每个Item的文本标签可以用自己的字体和刷子呈现。这些用setFont()和setForeground()函数指定,并使用font()和foreground()读取。默认情况下,项目是enabled, editable, selectable, checkable,并且可以用作drag、drop操作的来源,也可以用作drop的目标。可以通过调用setFlags()来更改每个Item的标志。可以使用setCheckState()函数检查可检查的Item。相应的checkState()函数指示是否已选中该Item。
可以通过调用setData()将特定于应用程序的数据存储在Item中。每个项目都可以包含二维子项表。这使得建立Item的层次结构成为可能。典型的层次结构是树,在这种情况下,子表是一个带有单列(列表)的表。
可以使用setRowCount()和setColumnCount()设置子表的尺寸。项目可以用setChild()将Item放在子表中。通过childe()方法获取指向子项的指针()。新的行和列也可以用insertRow()和insertColumn()插入,也可以与appendRow()和appendColumn()插入。使用附加功能和插入功能时,子表的尺寸将根据需要增长。
现有的子项可以使用removeRow()或takeRow()删除;相应地,可以使用removeColumn()或takeColumn()删除列。
可以通过调用sortChildren()对项目的孩子进行分类。
3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333