获取当前在QTreeVi中选择的项目

2024-06-07 19:41:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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文档非常缺乏,所以很难知道我是否以一种感性的方式做过事情。


Tags: keyselfeventinitdef分支uriqt
4条回答

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

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

你应该找到你要找的东西。

至于文档,即使没有特定于python的文档,也有助于阅读正式的Qt文档,但是类的层次结构和功能仍然是相同的。在文档中很少有C++特定的信息。

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

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

你应该找到你要找的东西。

至于文档,即使没有特定于python的文档,它也有助于阅读正式的Qt文档,但是类的层次结构和功能仍然是相同的。在文档中很少有C++特定的信息。

Harald的答案对我不起作用,因为我正在使用一个qsqquerymodel作为模型(我得到了错误{AttributeError}'QSqlQueryModel' object has no attribute 'itemFromIndex')。

不过,为了获得所选行的第0列数据,下面的技巧帮了我一把:

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

Harald的答案对我不起作用,因为我正在使用一个QSqlQueryModel作为模型(我得到了错误{AttributeError}'QSqlQueryModel' object has no attribute 'itemFromIndex')。

不过,为了获得所选行的第0列数据,下面的技巧帮了我一把:

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

相关问题 更多 >

    热门问题