层次结构如下:QVariantMap <- QVariantList <- QVariantMap
问题是QVariant::toList()和QVariant::toMap()返回副本,这意味着我不能改变嵌套QVariantMap或QVariantList中的值。
有办法解决吗?
注:我尝试QJsonObject代替(因为它很容易转换为QVariantMap),但面临同样的问题:我不能改变QJsonObject存储在QJsonArray,因为QJsonObject的操作符[]标记为const(这对我来说也是有问题的QJsonValue和ULongLong一起工作,所以我回到了QVariant)。
层次结构:
QVariantMap mainTable;
QVariantList list;
QVariantMap subTable;
subTable["id"] = 0;
list << subtable;
mainTable["list"] = list;
我没有问题填充它,但当我试图改变存储值以后(在其他方法)有问题,因为我不能改变subTable["id"]值:
mainTable["list"].toList()[index].toMap()["id"] = 12;
乍一看,我找不出别的办法来解决你的问题,这可能是沉重的…
QVariantMap mainTable;
QVariantList list;
QVariantMap subTable;
subTable["id"] = 0;
list << subTable;
mainTable["list"] = list;
qDebug() << mainTable["list"].toList()[0].toMap()["id"].toInt();
auto tempList = qvariant_cast<QVariantList>(mainTable["list"]);
auto tempSubTable = qvariant_cast<QVariantMap>(tempList[0]);
tempSubTable["id"] = 42;
tempList[0] = tempSubTable;
mainTable["list"] = tempList;
qDebug() << mainTable["list"].toList()[0].toMap()["id"].toInt();
运行这段代码得到
0
42