2011-12-08 45 views
1

私はQTreeWidgetを含むプロジェクトに取り組んでいます。このウィジェットには、子ノードまたは他の兄弟ノードを持つ親ノードがあります。各ノードには、名前の他に整数形式のユニークなIDが添付されます。QTreeWidgetとPyQt:ファイルからデータを保存して読み込む方法

今、..... QTreeWidgetのすべてのノードをディスクに保存するにはどのような方法が必要ですか?

私がやることは、ツリーをたどって各ノードをsqlite DBに保存することです。私はすでにそれを木の中と同じ順序で行うことができます。しかし...... QTreeWidgetとそれに関連するQTreeWidgetItemオブジェクトには、他のノードを挿入するために使用できるuniqインデックスはありません。

私がツリーを再構築するとき、子は親/祖先(それがツリーに存在する)に接続する必要があります。これを行うには、配列内に(親の名前、parentID)のような、既にツリーに追加されている親とそれらのIDを追跡します。 parentIDは、QTreeWidget/WidgetItemの中のノードとしての位置とは何の関係もないことに注意してください。これは自分で作成し、QTreeWidget/QTreeWidgetItemは何も供給していないので、何らかのタグのようにノードの名前をsqlite dbにまとめて格納します。 QTreeWidgetでその親を選択I

  1. が同じIDの配列又はQTreeWidgetを検索、SQLiteのDBからParentIDを取る
  2. 正しい親を決定するために

  3. treeviewの親ノードにsqlite dbアイテムを子ノードとして追加します。なぜなら、ノードが追加されるたびに検索しているため、私は、ノードの周りに挿入するために使用することができますQTreeWidget/WidgetItem内部の欠落インデックスのの

しかし、それはこのよう不器用な感じ、。

これははるかにエレガントでリソースの消費が少ないことがわかっています。 正確なコーディング例は探していませんが、使用するメソッドとプロパティのアイデアやヒントについては、QTreeWidgetQTreeWidgetItemから詳細を探しています。

アイデア?

答えて

-1

あなたのtreewidgetをxmlとしてシリアル化するのは自然ではありませんか?

もしそうなら、QXmlStream Bookmarks Exampleがインスピレーションを与えるかもしれません。

0

TreewidgetItemのdataプロパティを使用して値を設定することで、これを管理しました。その値を参照として使用して、1つまたは複数のTreewidgetItem(単数または複数)を見つけると、完全なツリーを簡単に保存できます。

関連する問題