2016-09-07 4 views
0

J'ai déjà QListView et j'ai déjà défini un modèle. Comment puis-je implémenter une méthode de sélection inversée?Inverser la sélection sur QListView

J'ai déjà essayé de faire un nouveau QItemSelection qui contient tous les éléments de mon modèle afin d'appeler ui.listView->selectionModel()->select(selection, QItemSelectionModel::Toggle); mais mon QItemSelection est vide.

J'ai également le droit d'utiliser la même méthode pour chaque QModelIndex de mon modèle, mais je n'ai trouvé aucun moyen d'obtenir une liste de tous les QModelIndex de mon modèle.

Des idées?

+0

quelqu'un s'il vous plaît? – michalis

Répondre

1

Je l'ai finalement trouvé. Il s'agit de comprendre QModelIndex et ne pas demander au modèle pour ses articles. La première chose est d'obtenir le QModelIndex qui est la racine du niveau actuel/branche du QListView et ensuite obtenir le QModelIndex s du premier et dernier enfants de cette racine QModelIndex. Après cela, vous pouvez facilement créer un nouveau QItemSelection qui contient tous les enfants de cette racine. Enfin, vous utilisez ce QItemSelection pour basculer le modèle de sélection du 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); 
}