【发布时间】:2016-07-15 16:28:26
【问题描述】:
我有两个 QTreeView。
第一个 (QTreeView1) 显示的文件夹,第二个 (QTreeView2) - 显示的子文件夹,在第一个 QTreeView1 中单击文件夹时加载。 在 QTreeView1 中按文件夹单击时,我使用子文件夹创建 QStandardItemModel 并将此模型设置为 QTreeView2。此外,两个 QTreeView 中的所有项目都是可检查的,我想保存所有已检查项目的状态。 如何为每个加载的文件夹组织模型存储。 是不是应该是这样的:
// store folder model on subfolders check state changed
QMap<QStandardItemModel*, QString> modelStorage;
modelStorage.push_back(folderModel, folderPath);
并在文件夹点击恢复文件夹:
QStandardItemModel* findFolderModel(QString folderPath)
{
QStandardItemModel* model;
foreach(auto path, modelStorage)
{
if (path == folderPath)
{
model = modelStorage.find(folderPath);
}
else model = nullptr;
}
return model;
}
然后显示模型... 存储所有文件夹模型是否正确?还是必须动态加载?但在那种情况下,我需要自己存储所有模型数据(例如,检查项目状态......)。此外,模型的数据可以更改一段时间,如果我从“快照”恢复模型,则无法显示“正确”的数据。
UPD 我也对我的建议的实施有疑问: 我通过 QTreeView1 中的文件夹单击存储/恢复模型,它似乎可以工作......但恢复的模型不包含/显示 QStandardItems。发生这种情况是因为 treeItem 在本地范围内分配了 new 运算符?在这种情况下,如何保存每个模型中的所有 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.
【问题讨论】:
标签: c++ qt qtreeview qstandarditemmodel