获取QTreeView中当前选定的项目

时间:2011-08-12 23:55:42

标签: python qt

我在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文档严重缺乏,所以很难知道我是不是以一种敏感的方式做事。

2 个答案:

答案 0 :(得分:5)

您正在调用正确的函数,它实际上会返回QModelIndexList,它只是QList<QModelIndex>的typedef,QModelIndex是可以指向 any <的数据结构/ em>树的一部分。 QModelIndex不是模型视图控制器(MVC)意义上的模型,而是QAbstractItemModel中对象的地址,它是所有Qt的ItemView对象(包括树)下的数据结构。你实际上非常接近,QAbstractModelIndex由一行,一列和一个父组成,它允许它在分层数据结构中的任何位置。如果你使用

index = self.selectedIndexes()[0]
crawler = index.model().itemFromIndex(index)

你应该找到你正在寻找的对象。

至于文档,即使没有python特定的文档,它有助于阅读官方Qt文档,类层次结构和功能仍然是相同的。文档中的C ++特定信息非常少。

答案 1 :(得分:0)

Harald的回答并不适合我,因为我使用QSqlQueryModel作为模型(我收到错误{AttributeError}'QSqlQueryModel' object has no attribute 'itemFromIndex')。

下面为我做了诀窍,获取所选行的第0列数据:

dbQueryModel.itemData(treeView.selectedIndexes()[0])