假设我有一个包含6行和6列的treeWidget。我已将选择行为设置为选择单个项目而不是整个行。这按预期工作,我可以选择单个单元格。我的问题是如何查询当前选择的单元格?
我尝试过使用treeWidget.selectedItems(),但这会返回一个列表treeWidgetItems,从我所知道的,它对应于整行。因此,如果我在同一行中选择多个列,则此命令将返回包含单个treeWidgetItem的列表。我无法找到在该treeWidgetItem中选择哪些列。
任何想法如何解决这个问题?
答案 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( ... )