1

私のプロジェクトでは、データ ファイルを解析し、そのファイルに基づいて QStandardItemModel を作成し、QTreeView に表示します。モデルは正常に作成され、作成時に QStandardItem ごとに特定のパラメーターを設定する方法を知っています。たとえば、表示テキストとアイコンを設定する方法を知っています。各項目に「余分な」データを格納するための「カスタム コンテナー」を作成する方法はありますか?

データファイルから読み取り、それをモデルに解析することは(信じて)問題なく実行できます。ただし、ユーザーは QTreeView 内からモデルを編集/操作できる必要があります。これには、項目の追加と削除が含まれます。これは単純に見えますが、その項目に関連付けられたデータの一部は QTreeView に表示されません。ユーザーが編集しようとするまで、それはちょっと...「非表示」です。ユーザーはアイテムをダブルクリックして、他のパラメーターやデータを編集できるダイアログを表示する必要があります (非常に長い文字列や QTreeView に表示できないものなど)。

ツリー内の各項目に関連するすべての「追加データ」を保存する方法を見つけようとして、かなりの困難を抱えています。最初は、ある種の QVector が頭に浮かびますが、QVector を操作しながらモデルを操作するという手法は、私には理解できません。

さらに悪いことに、ユーザーは、以前のデータ ファイルに加えられた編集を保持したまま、異なるデータ ファイル (別名モデル) を切り替えることができる必要があります。

何か案は?ご不明な点がございましたら、お気軽にお問い合わせください。私はあなたが望む限り明確にすることができます. :) 御時間ありがとうございます。

4

1 に答える 1

5

答えはイエスです。追加のデータを保存できます。特定setData()user role + 1. 例えば:

view->model()->setData(someIndex,"New Data", Qt::UserRole + 1);

このデータを取得するには、data()メソッドと同じロールを使用します。これを編集するために、カスタム ダイアログまたはカスタム デリゲートを使用することもできます。

QVariant QListはやなどのコンテナーを使用QStringListできるため、コンテナーも使用できます。例えば:

auto in = ui->tableView->model()->index(0,0);
QList<QVariant> lst;
lst << "one" << "two" << "three";
view->model()->setData(in,QVariant(lst),Qt::UserRole+1);
//...
qDebug() << "output:"<<view->model()->data(in,Qt::UserRole+1).toList();

出力:

出力: (QVariant(QString, "1") , QVariant(QString, "2") , QVariant(QString, "3") )

于 2014-12-23T05:54:27.623 に答える