我有一个QListView,我已经为它设置了一个模型。如何实现反转选择的方法?
我已经尝试创建一个新的QItemSelection
,其中包含我的模型的所有项目,以便调用ui.listView->selectionModel()->select(selection, QItemSelectionModel::Toggle);
,但我的QItemSelection
返回空。
我也想过对我的模型的每个QModelIndex使用相同的方法,但是我没有办法得到我的模型的所有QModelIndex
的列表。
任何想法?
我终于找到了。这一切都是关于理解QModelIndex
,而不是要求模型提供它的项目。首先是获得QListView
当前级别/分支的根QModelIndex
,然后获得该根QModelIndex
的第一和最后一个子QModelIndex
s。之后,您可以轻松地创建一个包含该根的每个子节点的新QItemSelection
。最后,使用这个QItemSelection
来切换QListView
的选择模型。
void BrowserWidget::invertSelection() {
QModelIndex rootIndex = ui.listView->rootIndex();
QModelIndex first = rootIndex.child(0, 0);
int numOfItems = m_itemsModel->rowCount(rootIndex);
QModelIndex last = rootIndex.child(numOfItems - 1, 0);
QItemSelection selection(first, last);
ui.listView->selectionModel()->select(selection, QItemSelectionModel::Toggle);
}