2016-07-14 7 views
0

をQStandardItemModel`sを整理することができますどのように私は2つのQTreeViewの持っています。最初QTreeView1のフォルダをクリックの上にロードされているサブフォルダを、表示 -私は1つにQTreeView

まず(QTreeView1)は、第二(QTreeView2)は、フォルダを表示します。 はQTreeView1でフォルダによるクリックで、私は、サブフォルダとQStandardItemModelを作成し、QTreeView2にこのモデルを設定します。また、QTreeView`sの両方のすべての項目はチェック可能で、すべてのチェック項目の状態を保存したいと思います。 ロードされた各フォルダのモデルストレージをどのように整理できますか。 は、すべてのフォルダのモデルを格納するための正しい方法は、それはあります...その後

QStandardItemModel* findFolderModel(QString folderPath) 
{ 
    QStandardItemModel* model; 
    foreach(auto path, modelStorage) 
    { 
     if (path == folderPath) 
     { 
      model = modelStorage.find(folderPath); 
     } 
     else model = nullptr; 
    } 

    return model; 
} 

、ショーモデル:

// store folder model on subfolders check state changed 
QMap<QStandardItemModel*, QString> modelStorage; 
modelStorage.push_back(folderModel, folderPath); 

としてフォルダをクリック上のフォルダを復元: が、それはこのようなものである必要がありますか?または動的にロードする必要がありますか?しかし、その場合は、すべてのモデルデータを自分で保存する必要があります(たとえば、チェック項目の状態...)。また、モデルのデータはしばらくの間変更できます。スナップショットからモデルを復元すると、「正しい」データが表示されません。

UPDも私は私の提案の実装について質問があります: 私はQTreeView1のフォルダでクリックでモデルを復元/保存し、働いているようだ...しかし、復元されたモデルが含まれていない/表示さQStandardItemsを。 treeItemはローカルスコープで新しい演算子で割り当てられているために起こりますか?どのようにして各モデルのすべてのQStandardItemを保存できますか?

model = new QStandardItemModel; 
QStandardItem* treeItem = new QStandardItem("item"); 
model->appendRow(treeItem); 
//.. 
modelStorage.insert(folderItem, model); 
ui.treeView->setModel(model); 
// after restore model pointer is valid, but hadn't contains any items. 

答えて

1

私は、あなたの両方のQTreeViewsための2つのQFileSystemModelsを使用しようとすることができますし、QStandardItemModelあなたが最初QTreeViewの項目をクリックするたびに作成していないと思います。ドキュメントでわかるように、QFileSystemModelにはsetRootPathメソッドがあります。最初のQTreeViewのフォルダをクリックするたびに、この方法を2番目のモデルに使用できます。私はそのフォルダとサブフォルダを説明していないことを

http://www.qtcentre.org/threads/27253-QFileSystemModel-with-checkboxes

QFilesystemmodel with Checkboxes

http://doc.qt.io/qt-5/qidentityproxymodel.html

+0

アドバイスThxを、その私のミス:この有益な情報を閲覧、あなたの項目がチェック可能にするために

ファイルシステムの構造ではありません...特定のデータベースからのフォルダとQStandardItemModelを作成し、それを手動で入力する必要があります。この場合の決定は? –

+1

このケースでは、QStandardItemModelを1つしか使用できないと思います。最初のQTreeViewでは、このモデルのすべてのフォルダを表示します。最初QTreeViewから決定した、特定のフォルダによりソースQStandardItemModelをフィルタリングするための第2 QTreeView使用(QStandardItemModel下)QSortFilterProxyModelの再実装のために。 –

+0

AMM)THX再び、しかしQTreeView1における構造はQTreeView2からサブフォルダが含まれていません。なぜなら、QTreeView1のフォルダは必要なときに読み込みが遅くなるからです。これが、すべてのデータを1つのモデル(データベース全体をロードする時間)に格納することができない理由です。それは私がQTreeView1モデルのキーのための項目と "キー"とサブフォルダモデルとフォルダモデル上のモデルを分割する動機づけそれについて何か意見はありますか?この場合 –

関連する問題