нет совпадения для ‘operator []’ (типы операндов: ‘QVariant’ и ‘const char [2]’) QVariant / QVariantMap

Я пытаюсь запустить класс-оболочку для json в qt 5.1, и я работаю над функцией, которая проверяет, является ли введенная переменная QVariantMap или просто QVariant, и все работает хорошо, пока я не перейду на второй уровень многомерный массив. Вот моя структура массива и код класса.

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;
}

0

Решение

// obj [«4»] [«3»] это вызывает проблемы

Это неверно, потому что QVariant не имеет перегрузки оператора []. Это также то, что компилятор пытается сказать вам с этим:

нет совпадения для ‘operator []’ (типы операндов: ‘QVariant’ и ‘const char [2]’) QVariant / QVariantMap

Вам нужно будет явно преобразовать любой вложенный QVariant в QVariantMap, если это базовый тип данных. Увидеть следующий метод для деталей:

QMap QVariant :: toMap () const

Возвращает вариант в виде QMap, если он имеет тип () QMetaType :: QVariantMap; в противном случае возвращает пустую карту.

Это не главное, но у вас есть еще две проблемы:

  • Вы, кажется, используете слово Varient в отличие от Variant.

  • В вашем коде отсутствует проверка ошибок и отчеты о конверсиях и т. Д.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]