gpt4 book ai didi

c++ - 不匹配 'operator[]'(操作数类型为 'QVariant' 和 'const char [2]')QVariant/QVariantMap

转载 作者:太空宇宙 更新时间:2023-11-04 11:42:11 31 4
gpt4 key购买 nike

我试图在 qt 5.1 中为 json 创建一个包装类,我正在研究一个函数,该函数将检查输入的 var 是 QVariantMap 还是只是 QVariant,并且一切正常,直到我进入第二个muli dimen 数组的级别。这是我的数组结构和类代码。

JsonHelper jh;
QVariantMap obj = jh.getJsonObjectVarientMap(data);

这给我带来了问题,当我只使用“obj”或“obj[“1”]”时没有问题,只有当我

 // obj["4"]["3"] this causes the problems
qDebug() << "Your returned val is : " << jh.keySearchVal(obj["4"]["3"],arr_index_txt);
QMap<QString,QVariant> mp = obj["4"].toMap();
foreach(QString key,mp.keys())
{
// this works ok
qDebug() << "key : " << key << " : val : " << mp[key];
}

QVariantMap JsonHelper::getJsonObjectVarientMap(QString in)
{
QJsonDocument d = QJsonDocument::fromJson(in.toUtf8());
return d.object().toVariantMap();
}

QVariant JsonHelper::keySearchVal(QVariant source, QString key)
{
QString type(source.typeName());
if(type=="QVariantMap")
{
QMap<QString, QVariant> map = source.toMap();
foreach(QString key_inner,map.keys())
{
QVariant in = map[key_inner];
if(key_inner==key)
{
return getVariantVal(in);
}
}
}
return "";
}

QVariant JsonHelper::keySearchVal(QVariantMap source, QString key)
{
foreach(QString key_inner,source.keys())
{
if(key_inner==key)
{
return source[key_inner];
}
}
return "";
}

QVariant JsonHelper::getVariantVal(QVariant in)
{
qDebug() << "from variant";
QString type(in.typeName());
if(type=="QVariantMap")
{
return in.toMap();
}
return in;
}

最佳答案

// obj["4"]["3"] this causes the problems

这是无效的,因为 QVariant 没有 operator[] 重载。这也是编译器试图告诉你的:

no match for 'operator[]' (operand types are 'QVariant' and 'const char [2]') QVariant/QVariantMap

如果这是底层数据类型,您将需要将任何嵌套的 QVariant 显式转换为 QVariantMap。查看following method详情:

QMap QVariant::toMap() const

Returns the variant as a QMap if the variant has type() QMetaType::QVariantMap; otherwise returns an empty map.

这不是重点,还有两个问题:

  • 您似乎使用了 Varient 这个词而不是 Variant。

  • 您的代码缺少错误检查和转化报告等。

关于c++ - 不匹配 'operator[]'(操作数类型为 'QVariant' 和 'const char [2]')QVariant/QVariantMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20942737/

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