获取选定的 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( ... )
的问题
假设我有一个 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( ... )