【问题标题】:Get selected QTreeWidget cells获取选定的 QTreeWidget 单元格
【发布时间】:2017-02-17 16:40:48
【问题描述】:

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

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

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

【问题讨论】:

  • 您可以遍历树并在每个项目上调用QTreeWidgetItem::isSelected()
  • 如果 isSelected() 有一个列参数,这可能会起作用,但它没有。记住 QTreeWidgetItem 代表整行。

标签: python qt pyside qtreewidget qtreewidgetitem


【解决方案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-&gt;setData( ... )的问题

【讨论】:

    猜你喜欢
    • 2019-01-09
    • 1970-01-01
    • 2017-03-04
    • 1970-01-01
    • 2018-03-10
    • 1970-01-01
    • 1970-01-01
    • 2012-01-06
    • 2015-02-27
    相关资源
    最近更新 更多