【发布时间】:2020-10-17 06:36:40
【问题描述】:
我正在尝试为项目的一部分创建一个虚拟文件系统(因为我找不到任何用于此的库 - 我找到的所有库都用于访问您的实际文件系统)。
我决定将其存储为 XML,然后通过生成 QStandardItemModel 并基于该模型生成 QTreeView 来显示它。
我目前正在尝试添加重命名、移动等选项。我可以相当容易地在 XML 中执行这些更改,但是我花了几个小时试图用树视图弄清楚它,但还没有得到任何结果。我能做的最好的事情是从 xml 文件重新生成模型,然后制作树视图模型。但是,这对于我的最终程序(将有几千个“文件”)来说可能太慢了,而且这也会折叠树视图中的所有节点,这看起来很烦人。总的来说,这似乎不是最好的方法,特别是因为我知道哪些节点正在被更改,所以在树视图(或模型)中编辑这些单独的节点会简单得多。
我希望它工作的方式是,用户选择要重命名的树视图的元素,我从树视图中获取 selectedItem,然后以某种方式在模型中查找相应的项目并对其进行修改。
我也考虑过遍历模型以找到我想要移动/重命名的项目,然后在模型中执行此操作,但我找不到任何关于如何遍历模型的好的文档(它甚至没有似乎有一个方法可以返回节点的子节点数)。
有没有“好”的方法?
例子:
def clicked():
index = list(treeView.selectedIndexes())[0]
# TODO: change text of index to "changed text"
app = QApplication([])
window = QWidget()
layout = QVBoxLayout()
treeView = QTreeView()
model = QStandardItemModel()
model.invisibleRootItem().appendRow(QStandardItem('a'))
child_node = QStandardItem('b')
child_node.appendRow(QStandardItem('c'))
model.invisibleRootItem().appendRow(child_node)
treeView.setModel(model)
treeView.clicked.connect(clicked)
layout.addWidget(treeView)
window.setLayout(layout)
window.show()
app.exec_()
【问题讨论】:
-
添加示例,对此感到抱歉。
标签: python pyqt pyqt5 qtreeview