QTreeWidget和PyQt:从文件中保存和读取数据的方法

时间:2011-12-08 14:35:48

标签: python sqlite pyqt qtreewidget qtreewidgetitem

我正在开发一个包含QTreeWidget的项目。此窗口小部件将具有包含子节点和/或其他兄弟节点的父节点。附加到每个节点将是整数形式的唯一ID以及名称。

现在.....我可以或应该使用哪些方法将QTreeWidget中的所有节点保存到磁盘以及如何在?????中重新读取它们

我要做的是遍历树并将每个节点保存到sqlite DB中。我已经能够以与树中完全相同的顺序执行此操作。但...... QTreeWidget及其相关的QTreeWidgetItem对象没有可用于插入其他节点的uniq索引。

当我重建树时,孩子必须依附于他们的父母/祖先(当时存在于树中)。为此,我会跟踪父级及其已添加到树中的ID,如(父名,parentID)在数组中。请注意,parentID与位置无关,而是与QTreeWidget / WidgetItem中的节点无关。它由我自己创建并存储在sqlite db allong中,其名称与节点名称相同,因为QTreeWidget / QTreeWidgetItem不提供任何标记。

确定正确的父母

  1. 从sqlite DB中获取ParentID
  2. 搜索数组或QTreeWidget搜索相同的ID
  3. QTreeWidget
  4. 中选择该父级
  5. 将sqlite db项作为子节点添加到父节点中 treeview
  6. 但这种方式感觉很笨拙,因为每次添加节点时都会进行搜索,并且由于QTreeWidget / WidgetItem内部缺少索引,我可以使用它来插入节点。

    我知道这应该做得更优雅,资源更少。 我不是在寻找确切的编码示例,而是更多关于QTreeWidgetQTreeWidgetItem中使用的方法和属性的想法和提示。

    有什么想法吗?

2 个答案:

答案 0 :(得分:0)

我通过在TreewidgetItem中设置一个值来使用TreewidgetItem的data属性来管理它。使用该值作为参考来查找一个或多个甚至所有TreewidgetItem,可以轻松保存完整的树。

答案 1 :(得分:-1)

将treewidget序列化为xml会不会更自然?

如果是这样,QXmlStream Bookmarks Example可能会提供一些灵感。