我对QVariantMAP / List和引用感到有点迷失。
我用QJson加载一个json并将其转换为QVariantMAP。 currentJSON [“tests”]是一个QVariantList
我希望浏览currentJSON [“tests”]并更新item [“label”]的值。 第一个循环尝试更新值,第二个循环显示它。不幸的是,值显示不是更新的值。 我想这是一个复制/参考问题,但我找不到如何修复它。
QVariantMap currentJSON = jObject.toVariantMap(); //jobject is the json
QVariantList l = qvariant_cast<QVariantList>(currentJSON["tests"]);
for (QVariantList::iterator hehe = l.begin(); hehe != l.end(); hehe++) {
QVariantMap test = hehe->toMap();
test["label"].setValue(QVariant("AAAAAAAAAAAAAAAAAAA"));
}
l = qvariant_cast<QVariantList>(currentJSON["tests"]);
for (QVariantList::iterator hehe = l.begin(); hehe != l.end(); hehe++) {
QVariantMap test = hehe->toMap();
//the value print is not AAAAAAAAAAAAAAAAAAA
qDebug() << test["label"].toString();
}
如果你能帮助我,谢谢。
答案 0 :(得分:0)
好的,在Amartel的帮助下,我找到了这个解决方案:
QVariantList l = qvariant_cast<QVariantList>(currentJSON["tests"]);
for (QVariantList::iterator hehe = l.begin(); hehe != l.end(); hehe++) {
//qDebug() << hehe->toMap();
QVariantMap test = hehe->toMap();
test["label"].setValue(QVariant("AAAAAAAAAAAAAAAAAAA"));
*hehe = test;
}
currentJSON["tests"] = l;
l = qvariant_cast<QVariantList>(currentJSON["tests"]);
for (QVariantList::iterator hehe = l.begin(); hehe != l.end(); hehe++) {
QVariantMap test = hehe->toMap();
qDebug() <<"y " << test["label"].toString();
}
我添加了: * hehe = test; currentJSON [&#34; tests&#34;] = l;
但是如果我有许多列表嵌套,这有点复杂。有没有办法使用引用而不是复制?