Получить выбранные ячейки QTreeWidget

Скажем, у меня есть treeWidget с 6 строками и 6 столбцами. Я установил поведение выбора для выбора отдельных элементов, а не всей строки. Это работает, как и ожидалось, и я могу выбирать отдельные ячейки. Мой вопрос: как мне запросить, какие ячейки выбраны в данный момент?

Я пробовал использовать treeWidget.selectedItems(), но это возвращает список treeWidgetItems, который, насколько я могу судить, соответствует всей строке. Поэтому, если я выберу несколько столбцов в одной строке, эта команда вернет список, содержащий один элемент treeWidgetItem. И я не могу найти способ узнать, какие столбцы выбраны в этом деревеWidgetItem.

Любые идеи, как это сделать?


person Neilius    schedule 17.02.2017    source источник
comment
Вы можете просмотреть дерево и вызвать QTreeWidgetItem::isSelected() по каждому пункту.   -  person PrestonH    schedule 17.02.2017
comment
Это может работать, если isSelected() имеет параметр для столбца, но это не так. Помните, что QTreeWidgetItem представляет всю строку.   -  person Neilius    schedule 17.02.2017


Ответы (1)


Возможно, вам придется использовать QItemSelectionModel и вызвать метод selectedIndexes()

Ссылка: http://doc.qt.io/qt-5/qitemselectionmodel.html#selectedIndexes

QItemSelectionModel* model = myTreeWidget->selectionModel();
QModelIndexList indexList = model->selectedIndexes();

for(int i = 0; i < indexList.size(); ++i) {
    QTreeWidgetItem* item = myTreeWidget->itemFromIndex( indexList[i] );
    // do something with each item
}

Также отдельные индексы в списке будут содержать .row() и .column() информацию, которая может быть полезной.

Редактировать

В качестве примера использования .column() из индекса:

for(int i = 0; i < indexList.size(); ++i) {
    QTreeWidgetItem* item = myTreeWidget->itemFromIndex( indexList[i] );

    int c = indexList[i].column();
    QVariant d = item.data(c, Qt::DisplayRole);
    d = QVariant( d.toString() + "*" )
    item->setData(c, Qt::DisplayRole, d);    
}

Каждый раз, когда выполняется этот цикл, выбранные ячейки должны добавлять * в конец.

изменить: исправлена ​​проблема с вызовом item->setData( ... )

person Naxos    schedule 17.02.2017