두 개의 QTreeView가 있습니다.하나의 QTreeView에 QStandardItemModel을 구성하는 방법
첫 번째 (QTreeView1) 표시된 폴더, 두 번째 (QTreeView2) - 첫 번째 QTreeView1을 클릭하면 폴더에로드 된 하위 폴더가 표시됩니다. 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.
조언을 들으,하지만 내 실수 내가 설명하지 않은 그 폴더와 하위 폴더 파일 시스템 구조가 아닙니다 ... 특정 데이터베이스의 폴더 및 QStandardItemModel 만들고 수동으로 채울합니다. 이 사건에 대한 결정은? –
이 경우에는 하나의 QStandardItemModel 만 사용할 수 있다고 생각합니다. 첫 번째 QTreeView에는이 모델의 모든 폴더가 표시됩니다. 두 번째 QTreeView의 경우 QStandardItemModel 아래의 QSortFilterProxyModel을 다시 구현하여 첫 번째 QTreeView에서 결정한 특정 폴더별로 소스 QStandardItemModel을 필터링합니다. –
amm) thx 다시 있지만 QTreeView1의 구조에는 QTreeView2의 하위 폴더가 포함되어 있지 않습니다. QTreeView1의 폴더가 필요할 때 느리게로드되기 때문에 폴더가 다릅니다. 그리고 이것이 하나의 모델에 모든 데이터를 저장할 수없는 이유입니다 (전체 데이터베이스를로드하는 시간). 그것은 내가 QTreeView1 모델의 키에 대한 항목을 가진 "키"및 하위 폴더 모델이있는 폴더 모델에서 모델을 나눌 동기를 부여합니다. –