第二层节点如果存在,你不应该再创建哦
时间: 2024-03-27 12:35:36 浏览: 101
非常感谢你的指正,你是对的。如果第二层节点已经存在,则不应该再创建它。下面是修改后的示例代码:
```cpp
// 假设你已经从Redis获取到了一个QJsonArray
QJsonArray jsonArray = ...;
// 用于存储已经创建的根节点和第二层节点
QMap<QString, QTreeWidgetItem*> rootItems;
QMap<QString, QTreeWidgetItem*> secondLevelItems;
// 遍历QJsonArray,将每个元素拆分为QStringList,并将其添加到QTreeWidget中
for(int i = 0; i < jsonArray.count(); i++) {
QStringList keys = jsonArray[i].toString().split(":");
QTreeWidgetItem *parent = nullptr;
QString rootKey = keys[0];
if(rootItems.contains(rootKey)) {
// 如果已经创建了根节点,则直接使用它
parent = rootItems[rootKey];
} else {
// 否则,创建一个新的根节点
parent = new QTreeWidgetItem(treeWidget);
parent->setText(0, rootKey);
rootItems.insert(rootKey, parent);
}
// 将其他key作为子节点添加到根节点下
QString secondLevelKey = "";
for(int j = 1; j < keys.count(); j++) {
QString key = keys[j];
if(j == 1) {
// 第二层节点
secondLevelKey = rootKey + ":" + key;
if(secondLevelItems.contains(secondLevelKey)) {
// 如果已经创建了第二层节点,则直接使用它
parent = secondLevelItems[secondLevelKey];
} else {
// 否则,创建一个新的第二层节点
QTreeWidgetItem *item = new QTreeWidgetItem(parent);
item->setText(0, key);
parent = item;
secondLevelItems.insert(secondLevelKey, item);
}
} else {
// 其他节点
QTreeWidgetItem *item = new QTreeWidgetItem(parent);
item->setText(0, key);
parent = item;
}
}
}
```
在上述代码中,我们使用了一个QMap来存储已经创建的根节点和第二层节点。当我们遍历每个元素时,我们首先检查该元素的根节点是否已经存在于QMap中。如果是,则直接使用它。否则,我们为该元素创建一个新的根节点,并将其添加到QMap中以供下次使用。
接下来,我们将该元素的第二层节点作为子节点添加到根节点下。如果第二层节点已经存在于QMap中,则直接使用它。否则,我们为该元素创建一个新的第二层节点,并将其添加到QMap中以供下次使用。
最后,我们将该元素的其他key作为子节点添加到第二层节点或根节点下。在循环的每个步骤中,我们将当前节点作为下一个节点的父节点。最后,我们将整个树形结构添加到QTreeWidget中,以便在页面中显示它。
阅读全文