2014-01-06 61 views
0

我試圖讓qt 5.1中json的包裝類的開始,我正在工作在一個函數上,它將檢查輸入的var是一個QVariantMap還是一個QVariant,並且一切都很好,直到我進入muli維數組的第二個層次。這裏是我的數組結構和類代碼。'operator []'不匹配(操作數類型是'QVariant'和'const char [2]')QVariant/QVariantMap

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

這使我的問題,我只是用 「目標文件」 或 「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; 
} 

回答

1

// OBJ [ 「4」] [「3」]這會導致問題

這是無效的,因爲QVariant沒有運算符[]重載。這也是什麼編譯器是想告訴你這一點:

敵不過 '操作[]'(操作數類型是 '的QVariant' 和 '爲const char [2]')的QVariant/QVariantMap

如果這是底層數據類型,則需要將任何嵌套的QVariant顯式轉換爲QVariantMap。有關詳細信息,請參閱following method

QMAP的QVariant :: toMap()const的

返回變種作爲QMAP如果變種類型()QMetaType :: QVariantMap;否則返回一個空的地圖。

這不是主要問題,但你也有另外兩個問題:

  • 你似乎用這個詞變式,而不是變。

  • 您的代碼缺少錯誤檢測和轉化的報表等

+0

非常感謝您的幫助。 – TheMan68

+0

這只是我班的開始,我不想浪費太多時間,這就是爲什麼我把它放在這裏沒有太多的錯誤閱讀等等,非常感謝。祝你有美好的一天 – TheMan68

+0

@ TheMan68:很棒,歡迎。 – lpapp

相關問題