2016-09-07 14 views
0

나는 QListView를 사용하고 있으며 모델을 이미 설정했다. 어떻게 반전 선택을위한 방법을 구현할 수 있습니까?QListView에서 선택 반전

ui.listView->selectionModel()->select(selection, QItemSelectionModel::Toggle);을 호출하기 위해 이미 내 모델의 모든 항목이 포함 된 QItemSelection을 새로 만들려고 시도했지만 내 QItemSelection이 비어 있습니다.

내 모델의 각 QModelIndex에도 동일한 방법을 사용하고 있지만 내 모델의 모든 QModelIndex 목록을 가져올 방법이 없습니다.

아이디어가 있으십니까?

+0

누구든지 알려주십시오. – michalis

답변

1

마침내 발견했습니다. QModelIndex을 이해하고 모델에 해당 항목을 묻지 않는 것이 전부입니다. 우선, QListView의 현재 레벨/분기의 루트 인 QModelIndex을 얻은 다음이 루트의 첫 번째 및 마지막 자식 QModelIndexQModelIndex을 얻습니다. 그런 다음이 루트의 모든 하위를 포함하는 새 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); 
}