我在 QTreeView 中有许多项目。每个项目都是使用此类生成的:
class Branch(QStandardItem):
def __init__(self, label, uri = None):
QStandardItem.__init__(self, label)
self.uri = uri
这是我真正的树:
class FileTree(QTreeView):
def __init__(self):
QTreeView.__init__(self)
def keyPressEvent(self, event):
if event.key() == Qt.Key_Space or event.key() == Qt.Key_Return:
crawler = self.selectedIndexes()[0].model().item(self.selectedIndexes()[0].row())
print(crawler.uri)
QTreeView.keyPressEvent(self, event)
如您所见,我不太确定如何从所选项目中获取 uri 变量。我发现 selectedIndexes()
返回一个模型而不是项目本身。我不确定如何从一个到另一个。尝试使用 self.selectedIndexes()[0].row()
获取项目编号有点摸不着头脑,但它似乎忽略了树中的各个分支(例如,它会给我一个分支中第一行的 0
,但不会告诉我它在哪个分支中。
从 QTreeView 中获取所选项目的正确方法是什么?或者是否有更好的方法来检测空格键或返回键是否被击中,从而使这更容易?严重缺乏 Qt 的 Python 文档,所以真的很难知道我是否以合理的方式做事。
最佳答案
您正在调用正确的函数,它实际上返回一个 QModelIndexList
这只是 QList<QModelIndex>
的类型定义与 QModelIndex
是可以指向树的任何部分的数据结构。 QModelIndex
不是 Model View Controller (MVC) 意义上的模型,而是 QAbstractItemModel
中对象的地址这是所有 Qt 的 ItemView 对象下的数据结构,包括你的树。你其实很接近,QAbstractModelIndex
由一行、一列和一个父项组成,这使得它可以寻址分层数据结构中的任何位置。如果你使用这条线
index = self.selectedIndexes()[0]
crawler = index.model().itemFromIndex(index)
您应该找到您正在寻找的对象。
至于文档,即使没有特定于 python 的文档,它有助于阅读官方 Qt 文档,类层次结构和功能仍然是相同的。文档中的 C++ 特定信息非常少。
关于python - 在 QTreeView 中获取当前选中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7047527/