我终于找到了。这完全是关于理解QModelIndex而不是向模型询问其项目。首先是获取QModelIndex当前级别/分支的根,QListView然后获取QModelIndex该根的第一个和最后一个子级的 s QModelIndex。之后,您可以轻松地创建一个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);
}