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

0

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

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

Это вызывает у меня проблемы, когда я просто использую "obj" или "obj [" 1 "]" проблем нет, только когда i

 // 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;
}
Теги:
qt
qvariant
qjson
qtcore

1 ответ

1
Лучший ответ

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

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

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

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

QMap QVariant :: toMap() const

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

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

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

  • В коде отсутствует проверка ошибок и отчетность для конверсий и т.д.

  • 0
    Спасибо большое за помощь.
  • 0
    Это только начало моего класса, и я не хотел тратить слишком много времени, и поэтому я надеваю его здесь, не читая много ошибок и т. Д. Большое вам спасибо. хорошего дня
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню