获取选定的 QTreeWidget 单元格

Get selected QTreeWidget cells

假设我有一个 6 行 6 列的 treeWidget。我已将 selection 行为设置为 select 单个项目而不是整行。这按预期工作,我可以 select 单个单元格。我的问题是如何查询当前 selected 的单元格?

我试过使用 treeWidget.selectedItems(),但是这个 returns 列表 treeWidgetItems,据我所知,对应于整行。因此,如果我 select 同一行中的多个列,此命令 returns 一个包含单个 treeWidgetItem 的列表。而且我无法找出在该 treeWidgetItem.

中 select 编辑了哪些列

有什么想法可以解决这个问题吗?

您可能需要使用 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( ... )

的问题