(Qt)在QVariantList中嵌套的QVariantMap(也嵌套在QVariantMap中)中按键更改值.<



层次结构如下: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

相关内容

  • 没有找到相关文章

最新更新