Инвертировать выделение в 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);
}
Другие вопросы по тегам