C++ Qt 存储 QTreeView的数据并读取
时间: 2024-02-09 14:13:16 浏览: 249
在 Qt 中,可以使用 QSettings 类将 QTreeView 中的数据保存到文件中,并在需要时读取出来。下面是存储和读取 QTreeView 数据的基本步骤:
1. 在 QTreeView 中,通过获取数据模型的根节点,递归遍历所有节点,将每个节点的数据保存到 QVariant 类型的列表中。例如:
```c++
QList<QVariant> dataList;
QModelIndex rootIndex = model->index(0, 0, QModelIndex());
int rowCount = model->rowCount(rootIndex);
for (int i = 0; i < rowCount; ++i) {
QModelIndex childIndex = model->index(i, 0, rootIndex);
dataList.append(childIndex.data(Qt::DisplayRole));
// 递归遍历子节点
if (model->hasChildren(childIndex)) {
saveTreeData(model, childIndex, dataList);
}
}
```
2. 将数据保存到文件中,例如可以使用 QSettings 类将数据保存到 INI 文件中:
```c++
QSettings settings("myapp.ini", QSettings::IniFormat);
settings.beginWriteArray("TreeViewData");
for (int i = 0; i < dataList.size(); ++i) {
settings.setArrayIndex(i);
settings.setValue("data", dataList[i]);
}
settings.endArray();
```
3. 在需要时,从文件中读取数据并更新 QTreeView 中的数据。例如:
```c++
QSettings settings("myapp.ini", QSettings::IniFormat);
int size = settings.beginReadArray("TreeViewData");
QModelIndex rootIndex = model->index(0, 0, QModelIndex());
for (int i = 0; i < size; ++i) {
settings.setArrayIndex(i);
QVariant data = settings.value("data");
// 在 QTreeView 中添加节点
model->insertRow(model->rowCount(rootIndex), rootIndex);
QModelIndex childIndex = model->index(model->rowCount(rootIndex) - 1, 0, rootIndex);
model->setData(childIndex, data, Qt::DisplayRole);
}
settings.endArray();
```
在实际使用中,可以根据需要将数据保存为不同的格式,例如 XML、JSON 等。同时,也可以根据需要对数据进行加密和解密,以保护数据的安全性。
阅读全文