1

私は理解しようとしている小さな問題があります.QTreeViewを使用しているQTアプリに取り組んでおり、子を持つカテゴリがたくさんあるので、次のようになります

Parent 1
Parent 2
  - Child 1
  - Child 2
Parent 3

などなど、データベースにはすべての通常の詳細(名前、ID、作成日など)を含む行があり、子である行には親が指定されています(つまり、pid =親行ID)。次に、標準の QSqlQuery を使用してループします。しかし、私が直面している問題はこれです...

アイテムはツリービューに追加されQStandardItem* item = new QStandardItem(icon, name);、行を追加しますが、私の子供は親のmodel->appendRow(item);を呼び出す必要がありますparentitem->appendRow(item);QStandardItem* itemしかし、すべてを保存せずに、どうすればそれが何であるかを知ることができますitemか?

話の教訓は、パフォーマンスを破壊しない次のいずれかを行う方法があるかどうかです。

  1. QStandardItem* item子ループで親を参照できる配列に格納しますか?
  2. QStandardItem* item子を追加するときに参照できるID または何かを割り当てます。
  3. 子配列要素が子として追加される配列から TreeView モデルを生成しますか?
  4. 他に思いつかなかったことが…

データベースからの子を持つ QTreeView の良い例を見つけることができないようです。

4

1 に答える 1

0

必要なのはQMap<int, QStandardItem*> rowItemMap. 特定の行 ID でデータベースから行を取得すると、すぐに項目が作成され、マップに追加されます。次に、マップで検索する親に追加します。ルート アイテムとしてダミーの親を作成する必要があります。アイテムへのポインタを格納することに問題はありません。合理的な量のアイテムの場合、それは問題になりません。10,000 を超えるアイテムを保存することを考えている場合は、ツリーの特定の深さまで推移閉包を提供するビューの使用を検討することをお勧めします。QSqlTableModelツリー全体をデータベースから一時モデルにコピーする必要なく、 を介してそのようなビューをツリーに直接マップする方がはるかに簡単です。

于 2013-09-13T02:49:51.453 に答える