QTreeWidget和PyQt:保存和读取数据的方法
我正在做一个项目,里面有一个 QTreeWidget
。这个控件会有父节点和子节点,还有兄弟节点。每个节点都会有一个独特的 ID
,用整数表示,还有一个名字。
现在……我应该用什么方法把所有的节点保存到磁盘上,然后再读取回来呢???
我打算遍历这个树,把每个节点保存到一个sqlite数据库里。我已经可以按照树中的顺序做到这一点。但是…… QTreeWidget
和它相关的 QTreeWidgetItem
对象没有一个可以用来插入其他节点的独特索引。
当我重建这个树的时候,子节点必须和它们的父节点或祖先连接在一起(这些父节点在树中已经存在)。为此,我会记录已经添加到树中的父节点及其 ID
,像是(父节点名字,parentID
)这样的信息放在一个数组里。需要注意的是,parentID
和节点在 QTreeWidget
/WidgetItem
中的位置没有关系。这个 ID
是我自己创建的,并和节点的名字一起存储在sqlite数据库中,算是一种标签,因为 QTreeWidget
/QTreeWidgetItem
并没有提供这样的标识。
为了找到正确的父节点,我会:
- 从sqlite数据库中获取
ParentID
, - 在数组或
QTreeWidget
中查找这个ID
, - 在
QTreeWidget
中选择这个父节点, - 把sqlite数据库中的项作为子节点添加到这个父节点下。
但是这样做感觉有点笨拙,因为每次添加节点都要搜索,而且因为 QTreeWidget
/WidgetItem
中缺少可以用来插入节点的索引。
我知道应该有更优雅、更少资源消耗的方法来做到这一点。我并不是在寻找具体的代码示例,而是想要一些关于如何使用 QTreeWidget
和 QTreeWidgetItem
的方法和属性的想法和提示。
有什么建议吗?
2 个回答
把你的树形控件保存成XML格式是不是更自然一些呢?
如果是这样的话,QXmlStream书签示例可能会给你一些灵感。
我通过使用TreewidgetItem的data属性来解决这个问题,给它设置了一个值。然后用这个值作为参考,可以很方便地找到一个、多个甚至所有的TreewidgetItem,这样就能轻松保存整个树形结构。