与'operator[]'不匹配(操作数类型为 'QVariant' 和"常量字符 [2]") QVariant/QVariantMap

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

本文关键字:QVariant 常量 QVariantMap 字符 类型 不匹配 operator 操作数      更新时间:2023-10-16

我试图在 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"] 这会导致问题

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

与"运算符[]"不匹配(操作数类型为"QVariant"和"const char [2]") QVariant/QVariantMap

您需要将任何嵌套的 QVariant 显式转换为 QVariantMap(如果这是基础数据类型)。有关详细信息,请参阅以下方法:

QMap QVariant::toMap() const

如果变体具有 type() QMetaType::QVariantMap,则以 QMap 形式返回该变体;否则返回空映射。

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

  • 您似乎使用"变体"一词而不是"变体"。

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