Model和View之谈:
①View是显示在UI界面上,实实在在与用户交互数据的组件,它本身不存储数据,而是通过与Model连接来对数据进行操作
②Model是作为view和底层数据之间的桥梁,它为数据提供了多种操作,相比于Row Data能更好管理
Model中存储数据的基本单元是一个Item,为了使数据与操作隔离,对于Item的访问要使用Index
由于Model的底层结构(虽然实现不是)是多维表,所以每个Item的Index都通过行列号与父项来获取
Model还提供了role属性,Item中包含多个数据,每个数据都有其对应的role,如UserRole对应用户自定义数据,DisplayRole对应组件显示的文本等等
QModelIndex
在model中,(为了分离式?)每个item都用index来表示,可以视作index=item,增删改查都通过index来进行,而不使用一个具体的类来表示item
在一般情况下(list和table中),一个index就相当于行号加列号所表示的item
但若是使用复杂的model如树形model,就需要显示各个item之间的层级关系,此时需要加上父item来表示一个index
QModelIndex indexA = model->index(0, 0, QModelIndex());//使用空index作为parent的就是顶层item
QModelIndex indexB = model->index(0, 0, indexA);//使用其他item作为parent的就是下层item
常用方法
仅提供了只读功能,要作修改还是要通过model来进行
index.column/row();//index所在的行/列
index.data();//返回index中的对应的role的data
index.model();//返回index所属的model,在处理多model时很有用
index.parent/sibling();//返回index的parent或同级item
//注意此处调用的是与item关联的model的parent函数来获取的
current item?selection的setModel?