我在QTreeView中有很多项目.每个项目都使用此类生成:
class Branch(QStandardItem):
def __init__(self, label, uri = None):
QStandardItem.__init__(self, label)
self.uri = uri
Run Code Online (Sandbox Code Playgroud)
这是我的实际树:
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)
Run Code Online (Sandbox Code Playgroud)
如您所见,我对如何从所选项目中获取uri变量有点不确定.我发现selectedIndexes()返回模型而不是项目本身.我不知道如何从一个到另一个.尝试使用项目编号self.selectedIndexes()[0].row()是在黑暗中拍摄的一点点,但它似乎忽略了树中的各个分支(例如,它会给我0一个分支中的第一行,但不会告诉我我关于它的分支的任何事情.
从QTreeView获取所选项目的正确方法是什么?或者有没有更好的方法来检测空格键或返回键被击中,这将使这更容易?Qt的Python文档严重缺乏,所以很难知道我是不是以一种敏感的方式做事.
您呼叫的正确的函数,它实际上返回QModelIndexList这仅仅是一个typedef QList<QModelIndex>与QModelIndex作为数据结构,可以指向任何树的一部分.QModelIndex不是模型视图控制器(MVC)意义上的模型,而是一个对象的地址,QAbstractItemModel它是所有Qt的ItemView对象(包括树)下的数据结构.你实际上非常接近,QAbstractModelIndex由一行,一列和一个父组成,它允许它在分层数据结构中的任何位置.如果你使用该行
index = self.selectedIndexes()[0]
crawler = index.model().itemFromIndex(index)
Run Code Online (Sandbox Code Playgroud)
你应该找到你正在寻找的对象.
至于文档,即使没有python特定文档,它有助于阅读官方Qt文档,类层次结构和功能仍然是相同的.文档中的C++特定信息非常少.