1

を含むプロジェクトに取り組んでいますQTreeWidget。このウィジェットには、子ノードまたは他の兄弟ノードを持つ親ノードがあります。各ノードにはID、名前だけでなく整数の形式で一意になります。

さて.....ディスク内のすべてのノードを保存するために使用できる、または使用すべき方法QTreeWidgetと、それらを読み戻す方法?????

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

ツリーを再構築するとき、子は親/祖先 (それまでにツリーに存在する) に接続する必要があります。そのために、配列内のID(parent name, ) のように、既にツリーに追加した Parent とその s を追跡します。は、 /内のノードとしての場所とは関係がないことにparentID注意してください。これは自分で作成し、 /が何も提供しないため、ある種のタグと同じように、ノードの名前とともに sqlite db に保存されます。parentIDQTreeWidgetWidgetItemQTreeWidgetQTreeWidgetItem

正しい親を決定するには

  1. ParentIDsqlite DB から取得し、
  2. 配列またはQTreeWidget同じものを検索しID
  3. でその親を選択しQTreeWidget
  4. の親に子ノードとして sqlite db アイテムを追加します treeview

しかし、ノードが追加されるたびに検索が行われ、QTreeWidget/内にWidgetItemノードを挿入するために使用できるインデックスが欠落しているため、この方法は不器用に感じます。

これはもっとエレガントで、リソースをあまり消費しない方法で行うべきだと私は知っています。私は正確なコーディング例を探しているわけではありませんが、 fromQTreeWidgetおよびから使用するメソッドとプロパティのアイデアとヒントを探していQTreeWidgetItemます。

何か案は?

4

2 に答える 2

-1

treewidget を xml としてシリアル化する方が自然ではないでしょうか?

もしそうなら、QXmlStream Bookmarks Exampleがヒントになるかもしれません。

于 2011-12-08T18:21:18.070 に答える