概念
项视图类中使用的选择模型提供基于模型/视图体系结构的工具的选择的一般描述。尽管用于操作选择的标准类足以满足所提供的项目视图,但选择模型允许您创建专门的选择模型,以满足您自己的项目模型和视图的要求。
有关视图中所选项的信息存储在QItemSlectModel 类的实例中。这将维护单个模型中项的模型索引,并且独立于任何视图。由于模型上可以有许多视图,因此可以在视图之间共享选择,从而允许应用程序以一致的方式显示多个视图。
选择由选择范围组成。通过只记录所选项目的每个范围的开始和结束模型索引,这些方法有效地维护关于大量项目选择的信息。项目的非连续选择是通过使用多个选择范围来描述选择来构造的。
选择应用于选择模型所包含的模型索引集合。最近选择的应用项目称为当前选择。即使在应用了此选择之后,也可以通过使用某些类型的选择命令来修改此选择的效果。
当前项和选定项
在视图中,始终存在当前项和选定项 - 两个独立状态。项可以是当前项目,并同时选中。视图负责确保始终存在当前项,例如,键盘导航需要当前项。
下表说明当前项和选定项之间的差异。
当前项目 | 选定项目 |
---|---|
只能有一个当前项 | 可以有多个选定项 |
通过键导航或鼠标按钮单击更改当前项 | 当用户与项交互时,根据多个预定义模式(例如,单个选择、多个选择等)设置或取消设置项的选定状态 |
如果按下编辑键F2,或双击项目(前提是启用编辑),则将编辑当前项目 | 当前项可以与锚点一起使用,以指定应选择或取消选择的范围(或两者的组合)。 |
当前项由焦点矩形指示 | 所选项使用选择矩形进行指示。 |
在操作选择时,将QItemSelectionModel看作一个项目模型中所有项目的选择状态的记录通常是有帮助的。
设置选择模型后,可以选择、取消选择项集合,也可以切换其选择状态,而无需知道已选择哪些项。可随时检索所有选定项的索引,还可以通过信号和插槽机制通知其他组件对选择模型进行更改。
使用选择模型
标准视图类提供可用于大多数应用程序的默认选择模型。可以使用视图的 selectionModel()函数获取属于一个视图的选择模型,并且在许多视图之间与setSelectionModel() 共享,因此通常不需要构建新的选择模型。
通过指定模型和QItemSelection的一对模型索引来创建选择。它使用索引来引用给定模型中的项,并将它们解释为选定项块中的左上和右下项。若要将选择应用于模型中的项目,则需要将选择提交给选择模型;这可以通过多种方式实现,每一种方式都对选择模型中已经出现的选择产生不同的影响。
选择项目:
构建一个自定义表模型的实例,并打开其数据的表视图
QStandardItemModel model(10,10);
QTableView *table = new QTableView(0);
table->setModel(model);
QItemSelectionModel *selectionModel = table->selectionModel();
QModelIndex topLeft;
QModelIndex bottomRight;
topLeft = model->