QML ItemSelectionModel не выбирает? - PullRequest
0 голосов
/ 02 мая 2018

У меня есть TreeView из QFileSystemModel и ItemSelectionModel:

ItemSelectionModel {
  id: sel
  model: fileSystemModel
  onSelectedIndexesChanged: {
    model.setSelected(selectedIndexes)
  }
}

TreeView {
  id: view
  anchors.fill: parent
  sortIndicatorVisible: true
  model: fileSystemModel
  rootIndex: rootPathIndex
  selection: sel
  selectionMode: 2
  TableViewColumn {
    id: namecolumn
    title: "Name"
    role: "fileName"
    resizable: true
    width: parent.width-sizeWidth-dateWidth-scrollBarWidth
    delegate: mycomp
  }
  ... other columns
}

Когда я сортирую TreeView по имени или размеру файла, выбор не обновляется. Поэтому в моем fileSystemModel (производном от QFileSystemModel) я создал функцию Q_INVOKABLE, которая должна хранить выбранные индексы:

Q_INVOKABLE void setSelected(QModelIndexList list) {
    _selectedIndices.clear();
    for(int i=0;i<list.count();i++) {
        _selectedIndices.append(QPersistentModelIndex(list[i]));
    }
}

Однако я не уверен, сработает ли это, так как я не уверен, совпадают ли индексы ItemSelectionModel с модельными индексами.

После сортировки мне показалось, что я пытаюсь установить выделение путем получения этого списка на стороне c ++:

Q_INVOKABLE QVariantList getSelected() {
    return static_cast<QVariantList>(_selectedIndices);
}

и в QML

onSortIndicatorOrderChanged: {
  var list = model.getSelected())
  console.log('new selection:')
  for(var idx in list) {
    console.log(list[idx])
    selection.select(list[idx],ItemSelectionModel.Select)
    console.log('now selected')
    console.log(selection.selectedIndexes)
  }
}

Вывод отладки в onSortIndicatorChanged показывает

qml: new selection:
qml: QPersistentModelIndex(5,0,0x1e2ad30,DisplayFileSystemModel(0x1544890))
qml: now selected
qml: 
sort by column 0
qml: new selection:
qml: QPersistentModelIndex(1,0,0x1e2ad30,DisplayFileSystemModel(0x1544890))
qml: now selected
qml: 

если я переключу sortIndicator. Похоже, что строка QPersistentModelIndex обновляется правильно. Однако selection.selectedIndexes пусто и выбор не отображается. Чего мне не хватает?

Другим способом (может быть, лучше) было бы получить доступ к QItemSelectionModel непосредственно в c ++, но я не знаю, как я мог бы получить к нему доступ (без поиска его имени объекта, что вредит повторному использованию).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...