Инвертировать выделение в QListView
У меня есть QListView, и я уже установил модель для него. Как я могу реализовать метод для инвертированного выбора?
Я уже пытался сделать новый QItemSelection
который содержит все элементы моей модели, чтобы позвонить ui.listView->selectionModel()->select(selection, QItemSelectionModel::Toggle);
но мой QItemSelection
возвращается пустым.
Я также хотел использовать один и тот же метод для каждого QModelIndex моей модели, но я не нашел способа получить список всех QModelIndex
моей модели.
Есть идеи?
1 ответ
Я наконец нашел это. Все дело в понимании QModelIndex
и не спрашивая модель для своих предметов. Прежде всего, чтобы получить QModelIndex
это корень текущего уровня / ветви QListView
а затем получить QModelIndex
с первых и последних детей этого корня 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);
}