readJsonSrc.cpp 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #include "datahpp/readJsonSrc.h"
  2. #include <QJsonDocument>
  3. #include <QJsonObject>
  4. #include <QFile>
  5. #include <iostream>
  6. #include <QVector>
  7. #include <QJsonArray>
  8. ReadJsonSrc::ReadJsonSrc(QString filePath)
  9. {
  10. QFile srcFile(filePath);
  11. if(!srcFile.open(QFile::ReadOnly)){
  12. std::cout<<"can't open file "<<qPrintable(filePath)<<std::endl;
  13. }
  14. QJsonObject jsonObj = QJsonDocument::fromJson(QString(srcFile.readAll()).toUtf8()).object();
  15. srcFile.close();
  16. readJsonObj(jsonObj);
  17. }
  18. void ReadJsonSrc::readJsonObj(QJsonObject obj)
  19. {
  20. //收集动画
  21. QJsonArray collAnim = obj["coll_template"].toArray();
  22. templateMap["collAnimTemp"] = readTemplate(collAnim);
  23. //事件
  24. QJsonArray event = obj["event_template"].toArray();
  25. templateMap["eventTemp"] = readTemplate(event);
  26. //动作
  27. QJsonArray action = obj["action_template"].toArray();
  28. templateMap["actionTemp"] = readTemplate(action);
  29. //容器池
  30. QJsonArray pool = obj["pool_template"].toArray();
  31. templateMap["poolTemp"] = readTemplate(pool);
  32. }
  33. QVector<ReadJsonSrc::Template> ReadJsonSrc::readTemplate(QJsonArray arr)
  34. {
  35. QVector<Template> tempVec;
  36. for(const auto &i:arr){
  37. QJsonObject tempObj = i.toObject();
  38. Template temp(tempObj["name"].toString(),tempObj["id"].toString());
  39. QVector<Fields> fields;
  40. QJsonObject fieldObj = tempObj["fields"].toObject();
  41. QStringList fiedsName = fieldObj.keys();
  42. for(const auto &j:fiedsName){
  43. QJsonObject content = fieldObj[j].toObject();
  44. Fields field(j,content["id"].toString(),content["type"].toString(),content["src"].toString(),content["default"].toString());
  45. fields.push_back(field);
  46. }
  47. temp.fields = fields;
  48. tempVec.push_back(temp);
  49. }
  50. return tempVec;
  51. }
  52. int ReadJsonSrc::getTemplateIndex(QString key,QString name)
  53. {
  54. QVector<Template> tempVec = templateMap[key];
  55. for(int i=0;i<tempVec.size();i++){
  56. if(tempVec[i].name == name) return i;
  57. }
  58. return -1;;
  59. }