我在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文档非常缺乏,所以真的很难知道我是否曾经以一种有意义的方式做过事情。
发布于 2011-08-13 00:39:49
您调用的是正确的函数,它实际上返回了一个QModelIndexList
,它只是QList<QModelIndex>
的一个类型定义,QModelIndex
是可以指向树的任何部分的数据结构。QModelIndex
不是模型视图控制器意义上的模型,而是QAbstractItemModel
中一个对象的地址,它是所有Qt的ItemView对象下的数据结构,包括您的树。您实际上非常接近,QAbstractModelIndex
由行、列和父级组成,这使得它可以访问分层数据结构中的任何位置。如果你使用这行
index = self.selectedIndexes()[0]
crawler = index.model().itemFromIndex(index)
您应该到达您正在寻找的对象。
至于文档,即使没有python特定的文档来帮助阅读官方的Qt文档,类的层次结构和功能仍然是相同的。文档中只有很少的C++特定信息。
发布于 2015-07-11 22:34:36
哈拉尔德的回答对我不起作用,因为我使用了一个错误作为模型(我得到了QSqlQueryModel {AttributeError}'QSqlQueryModel' object has no attribute 'itemFromIndex'
)。
下面的代码完成了我的工作,获得了所选行的第0列数据:
dbQueryModel.itemData(treeView.selectedIndexes()[0])
https://stackoverflow.com/questions/7047527
复制相似问题