2011-12-08 30 views
1

我工作的一個包含QTreeWidget項目。該小部件將具有包含子節點和其他兄弟節點的父節點。連接到每個節點將是一個整數以及名稱形式的唯一IDQTreeWidget和PyQt的:方法保存和讀取數據回從文件

現在.....可以或者我應該用什麼樣的方法來保存所有的QTreeWidget到磁盤的節點以及如何閱讀它們放回?????

我會做的是遍歷樹和每個節點保存到一個SQLite數據庫。我已經可以按照與樹中的順序完全相同的順序來執行此操作。但是...... QTreeWidget及其相關的QTreeWidgetItem對象沒有uniq索引,您可以使用它來插入其他節點。

當我重建樹,童車必須附着到他們的父母/祖先(其通過隨後在樹中存在)。爲此,我跟蹤已經添加到樹中的父母及其父母及其ID,如數組中的父母(父母名稱,parentID)。請注意,parentID與位置QTreeWidget/WidgetItem內的節點無關。它是由我自己創建的,並且將sqlite db allong與節點的名稱一起存儲,就像某種標籤一樣,因爲QTreeWidget/QTreeWidgetItem不提供任何標籤。

爲了確定正確的父我

  1. 採取從源碼DB中ParentID
  2. 查詢的陣列或QTreeWidget該相同ID
  3. QTreeWidget選擇該父,
  4. 將sqlite數據庫項目作爲子節點添加到 treeview中的父項目中。

但它的每個節點被添加,因爲QTreeWidget/WidgetItem我可以使用周邊插入節點內缺失索引的時間感到笨拙這種方式,因爲搜索的。

我知道這應該做得更優雅,資源更少。 我不是在尋找確切的編碼例子,而是更多的想法和提示的方法和屬性使用從QTreeWidgetQTreeWidgetItem

任何想法?

回答

0

我通過使用TreewidgetItem的數據屬性通過在它設置一個值管理這一點。使用該值作爲引用來查找一個或多個TreewidgetItem(s),可以輕鬆保存完整的樹。