我在 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
这只是一个 typedefQList<QModelIndex>
与QModelIndex
是可以指向的数据结构any树的一部分。QModelIndex
不是模型视图控制器(MVC)意义上的模型,而是一个对象的地址QAbstractItemModel
这是所有 Qt 的 ItemView 对象(包括您的树)下的数据结构。其实你们已经很接近了QAbstractModelIndex
由行、列和父级组成,这使得它可以寻址分层数据结构中的任何位置。如果您使用该线路
index = self.selectedIndexes()[0]
crawler = index.model().itemFromIndex(index)
你应该找到你正在寻找的物体。
至于文档,尽管没有特定于 python 的文档,但阅读官方 Qt 文档会有所帮助,但类层次结构和功能仍然是相同的。文档中几乎没有 C++ 特定信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)