第一个元素同样的时候你重复创建了吧
时间: 2024-03-27 10:35:34 浏览: 53
存在重复元素1
你是对的,我在上一个示例代码中有些疏忽了。如果第一个元素相同,我们应该只创建一个根节点,而不是为每个元素都创建一个根节点。下面是修改后的示例代码:
```cpp
// 假设你已经从Redis获取到了一个QJsonArray
QJsonArray jsonArray = ...;
// 用于存储已经创建的根节点
QMap<QString, QTreeWidgetItem*> rootItems;
// 遍历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作为子节点添加到根节点下
for(int j = 1; j < keys.count(); j++) {
QString key = keys[j];
QTreeWidgetItem *item = new QTreeWidgetItem(parent);
item->setText(0, key);
parent = item;
}
}
```
在上述代码中,我们使用了一个QMap来存储已经创建的根节点。当我们遍历每个元素时,我们首先检查该元素的根节点是否已经存在于QMap中。如果是,则直接使用它。否则,我们为该元素创建一个新的根节点,并将其添加到QMap中以供下次使用。
接下来,我们将该元素的其他key作为子节点添加到根节点下。在循环的每个步骤中,我们将当前节点作为下一个节点的父节点。最后,我们将整个树形结构添加到QTreeWidget中,以便在页面中显示它。
阅读全文