【问题标题】:QTreeWidget and PyQt: Methods to save and read data back in from fileQTreeWidget 和 PyQt:从文件中保存和读回数据的方法
【发布时间】:2011-12-08 14:35:47
【问题描述】:

我正在处理一个包含QTreeWidget 的项目。此小部件将具有带有子节点和/或其他兄弟节点的父节点。附加到每个节点的将是一个唯一的ID,其形式为整数和名称。

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

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

当我重建树时,孩子必须依附于他们的父母/祖先(那时他们已经存在于树中)。为此,我会跟踪已添加到树中的父母及其IDs,例如数组中的(父母姓名,parentID)。请注意,parentID 与作为QTreeWidget/WidgetItem 内部节点的位置无关。它是我自己创建的,并与节点名称一起存储在 sqlite db 中,就像某种标签一样,因为QTreeWidget/QTreeWidgetItem 不提供任何标签。

确定正确的父I

  1. 从 sqlite DB 中获取 ParentID
  2. 在数组或QTreeWidget 中搜索相同的ID
  3. QTreeWidget 中选择该父项,
  4. 将 sqlite db 项作为子节点添加到 treeview

但是这种方式感觉很笨拙,因为每次添加节点时都要进行搜索,并且因为QTreeWidget/WidgetItem 中缺少索引,我可以用来在周围插入节点。

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

有什么想法吗?

【问题讨论】:

    标签: python sqlite pyqt qtreewidget qtreewidgetitem


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-06
        • 2013-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-24
        相关资源
        最近更新 更多