获取选定的QTreeWidget单元格

时间:2017-02-17 16:40:48

标签: python qt pyside qtreewidget qtreewidgetitem

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

我尝试过使用treeWidget.selectedItems(),但这会返回一个列表treeWidgetItems,从我所知道的,它对应于整行。因此,如果我在同一行中选择多个列,则此命令将返回包含单个treeWidgetItem的列表。我无法找到在该treeWidgetItem中选择哪些列。

任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分: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( ... )

的调用问题