Qt4:如何在QTreeView中获取选定的索引

3
我有一个程序,它有一个目录树,打开后会进入这些目录中文件的子树。我的视图中有两列: - 目录树本身 - 旁边的文本列,显示文件是否被选中
用户可以一次选择多个文件。当用户完成选择后,点击“确定”按钮时,应在适当的文件旁边将文本更改为“已选”。 问题是,我无法找到一种告诉它要更改文本的索引的方法。我尝试过selectionModel()->selectedIndexes()(和selectedRows),但这两者都没有办法从整个树中获取原始索引。我该如何从整个树中获取原始索引?
1个回答

2
正如mumush所提到的,Andrea的答案仅适用于QTreeWidget,而不是QTreeView。QTreeView没有selectedItems方法,因此您必须使用selectedIndexes,它将返回一个QModelIndex对象列表。
您可以使用这些对象来访问和更新树模型中的项,如下所示:
# Get the fields that are currently selected and loop over them
indexes = tree.selectedIndexes()
for index in indexes:
    # We only care about the "Selected" column.
    if index.column() != 1:
        continue

    # Change the tree value. 
    treeModel.setData(index, "[SELECTED]")

1
请注意,selectedIndexes() 方法是 QTreeView 的受保护成员,因此只适用于自定义派生类,而非 QTreeView 实例。 - Nicolas Holthaus
哦,这在我的 QTreeView 实例上运行良好,但这可能是因为我正在使用 PySide。但如果它在核心 Qt 中受到保护,那么这让我想知道是否有更优选的方法来使用实际的 QTreeView?或者假定每个使用 QTreeView 的人都会对其进行子类化? - mmitchell
7
在C++方面,有一个名为selectionModel()的公共成员,可以调用它的selectedIndexes()方法。 - Nicolas Holthaus
有道理。 :) 或许你应该将它添加为答案,因为它比已经发布的两个答案都更好。 - mmitchell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接