python - 在 QTreeView 中获取当前选中的项目

标签 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 文档,所以真的很难知道我是否以合理的方式做事。

最佳答案

您正在调用正确的函数,它实际上返回一个 QModelIndexList这只是 QList<QModelIndex> 的类型定义与 QModelIndex是可以指向树的任何部分的数据结构。 QModelIndex不是 Model View Controller (MVC) 意义上的模型,而是 QAbstractItemModel 中对象的地址这是所有 Qt 的 ItemView 对象下的数据结构,包括你的树。你其实很接近,QAbstractModelIndex由一行、一列和一个父项组成,这使得它可以寻址分层数据结构中的任何位置。如果你使用这条线

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

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

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

关于python - 在 QTreeView 中获取当前选中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7047527/

相关文章:

c++ - Qt:父子小部件。关闭单个子部件是否意味着关闭其他子部件?

c++ - 对于使用 CMake 的程序,gdb 程序退出代码 01

qt - 如何使用QT国际化

Python openweather, json - 按城市名称获取天气 - 我怎么能说城市不正确?

python - pyopenssl,扭曲让我们加密: server's certificate chain is incomplete

python - 用 python 中的数字替换嵌套列表中的唯一值

python - 如何将 Pandas 数据框显示为数据表?

c++ - 如何将c++项目导入QT creator

python - 从 "YYYYMMDD"格式的字符串计算第二天

c++ - 从 C++ 向 QML 发出信号以读取 Q_PROPERTY 是一个同步事件吗?