gpt4 book ai didi

c++ - 分配给嵌套的 QVariantMap

转载 作者:可可西里 更新时间:2023-11-01 15:45:48 25 4
gpt4 key购买 nike

#include <QtCore/QCoreApplication>
#include <QVariant>
#include <QtDebug>

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QVariantMap map;
map["foo"] = QVariant(QVariantMap());
map["baz"] = "asdf";
qvariant_cast<QVariantMap>(map["foo"])["bar"] = "a";

qDebug() << qvariant_cast<QVariantMap>(map["foo"])["bar"].toString();
qDebug() << map["baz"].toString();

return a.exec();
}

我试图在嵌套的 QVariantMap 中分配给 QVariant。第一个 qDebug() 不输出任何内容,但第二个按预期输出“asdf”。我如何将嵌套变量映射中的“bar”键分配给一个值?

最佳答案

问题是 qvariant_cast 不返回对其运行的 QVariant 内部的引用;它返回一个拷贝。因此,如果您用新的子 map 覆盖顶级 map 中的“foo”元素,代码将正常工作:

#include <QtCore/QCoreApplication>
#include <QVariant>
#include <QtDebug>

int main(int argc, char** argv)
{
QCoreApplication a(argc, argv);
QVariantMap map;
map["foo"] = QVariant(QVariantMap());
map["baz"] = "asdf";

QVariantMap newMap;
newMap["bar"] = "a";
map["foo"] = QVariant(newMap);

qDebug() << qvariant_cast<QVariantMap>(map["foo"])["bar"].toString();
qDebug() << map["baz"].toString();

return a.exec();
}

大概,您想修改现有 map 而不是覆盖它。您可以通过复制现有 map 、添加新数据(这将导致深度复制),然后将 map 写回:

QVariantMap existingMap = qvariant_cast<QVariantMap>(map["foo"]);
existingMap["bar"] = "a";
map["foo"] = QVariant(existingMap);

如果您正在考虑存储大量数据,您可能希望重新考虑您对 QVariant 的使用。

关于c++ - 分配给嵌套的 QVariantMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11090846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com