在 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);
}
我有 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);
}