15

Qt (C++ を使用) でアプリケーションを作成しており、ツリー ビューでオブジェクト構造を表す必要があります。これを行う方法の 1 つは、このためのモデルを作成することですが、この件に関する Qt のドキュメントを読んでも、まだかなり混乱しています。

私が持っている「構造」は非常に単純です。コンテナにProjectオブジェクトを保持Taskするオブジェクトがあります。std::vectorこれらのタスクは、子タスクを保持することもできます。

Qt の XML クラスを使用して、これらのプロジェクトを XML ファイルとの間で読み書きするメソッドを既に作成しました。

モデルをゼロから作成するためのドキュメントまたは「推奨される読書」はありますか? これをどのように実装し始めることをお勧めしますか?

4

2 に答える 2

18

質問へのコメントで Virgil が言ったことの代わりに、モデルにQStandardItemModelクラスを使用し、このクラスを使用してツリーを構築することができます。以下に例を示します。

QStandardItemModel* model = new QStandardItemModel();

QStandardItem* item0 = new QStandardItem(QIcon("test.png"), "1 first item");
QStandardItem* item1 = new QStandardItem(QIcon("test.png"), "2 second item");
QStandardItem* item3 = new QStandardItem(QIcon("test.png"), "3 third item");
QStandardItem* item4 = new QStandardItem("4 forth item");

model->appendRow(item0);
item0->appendRow(item3);
item0->appendRow(item4);
model->appendRow(item1);

ui->treeView->setModel(model);

UI(ビュー)が壊れたら削除model。ドキュメンテーション:

于 2009-12-31T18:09:35.133 に答える
4

これを機能させるための基本的なトリックは、モデルをデータ構造に正しくマッピングすることです。難しいように見えるかもしれませんが、そうである必要はありません。

まず、QAbstractItemModel::createIndexを使用してモデル インデックスを作成すると、使用する createIndex のインスタンスに応じて、インデックスに追加できるポインターまたは uint32 を介して独自のデータ構造を参照できます。

parent第二に、構造を明確に(あなたが持っているように)頭に入れておくと、 andindex関数を書くのはとても簡単です。ここで重要なのは、モデル ルートが初期化されていないQModelIndexインスタンスであることを理解することです。つまりQModelIndex::isValid() == false、ルートを示します。

第 3 に、複数の列を作成する場合は、最初の列だけが子を持つことに注意してください。

第 4 に、期待どおりに動作していることを確認するには、ModelTestクラスを使用します。モデルを監視およびチェックするため、Qt モデル ビュー クラスが期待する規則に従うことができます。

于 2010-01-01T09:21:24.833 に答える