在 QListView 上反转选择

Invert selection on QListView

我有 QListView,我已经在上面设置了一个模型。如何实现反转选择的方法?

我已经尝试制作一个包含模型所有项目的新 QItemSelection 以便调用 ui.listView->selectionModel()->select(selection, QItemSelectionModel::Toggle); 但我的 QItemSelection returns 是空的。

我也想过对模型的每个 QModelIndex 使用相同的方法,但我发现无法获取模型的所有 QModelIndex 的列表。

有什么想法吗?

终于找到了。这一切都是关于理解 QModelIndex 而不是向模型询问其项目。首先是获取 QModelIndex,它是 QListView 的当前 level/branch 的根,然后获取此根 QModelIndex 的第一个和最后一个子节点的 QModelIndex =11=]。 之后,您可以轻松地创建一个新的 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);
}