ZBLOG

struct st_answer_trueOrfalse { bool banswer;//答案 bool banswer_standard;//标准答案 bool bret; //结果 }; //选择题 struct st_answer_choose { int banswer;//答案 int banswer_standard;//标准答案 bool bret; //结果 }; //多选择题 struct st_answer_cho...

这里给出封装的两个函数,用于将结构体st_subject和Json之间进行相互转化:

  1. #include <QJsonObject>
  2. #include <QJsonArray>
  3. #include <QJsonValue>
  4. #include <QJsonDocument>
  5. // 将st_subject结构体转换为Json
  6. QJsonObject st_subjectToJson(const st_subject& subject) {
  7. QJsonObject json;
  8. json["subject_number"] = subject.subject_number;
  9. json["subject_type"] = subject.subject_type;
  10. json["subject_name"] = subject.subject_name;
  11. // 图片信息转换为Base64字符串存储
  12. QByteArray imageData;
  13. QBuffer buffer(&imageData);
  14. buffer.open(QIODevice::WriteOnly);
  15. subject.image.save(&buffer, "PNG"); // 假设图片格式为PNG
  16. QString base64Image = QString::fromLatin1(imageData.toBase64().data());
  17. json["image"] = base64Image;
  18. // 根据题目类型存储对应的答案信息
  19. switch (subject.subject_type) {
  20. case 0: { // True or False
  21. QJsonObject trueFalseAnswerObj;
  22. trueFalseAnswerObj["banswer"] = subject.subject_Type.trueOrfalse.banswer;
  23. trueFalseAnswerObj["banswer_standard"] = subject.subject_Type.trueOrfalse.banswer_standard;
  24. trueFalseAnswerObj["bret"] = subject.subject_Type.trueOrfalse.bret;
  25. json["subject_Type"] = trueFalseAnswerObj;
  26. break;
  27. }
  28. case 1: { // Choose
  29. QJsonObject chooseAnswerObj;
  30. chooseAnswerObj["banswer"] = subject.subject_Type.choose.banswer;
  31. chooseAnswerObj["banswer_standard"] = subject.subject_Type.choose.banswer_standard;
  32. chooseAnswerObj["bret"] = subject.subject_Type.choose.bret;
  33. json["subject_Type"] = chooseAnswerObj;
  34. break;
  35. }
  36. case 2: { // Choose Multiple
  37. QJsonObject chooseMultipleAnswerObj;
  38. QJsonArray banswerArray, banswerStandardArray;
  39. for (int i : subject.subject_Type.choose_multiple.banswer) {
  40. banswerArray.append(i);
  41. }
  42. for (int i : subject.subject_Type.choose_multiple.banswer_standard) {
  43. banswerStandardArray.append(i);
  44. }
  45. chooseMultipleAnswerObj["banswer"] = banswerArray;
  46. chooseMultipleAnswerObj["banswer_standard"] = banswerStandardArray;
  47. chooseMultipleAnswerObj["bret"] = subject.subject_Type.choose_multiple.bret;
  48. json["subject_Type"] = chooseMultipleAnswerObj;
  49. break;
  50. }
  51. }
  52. return json;
  53. }
  54. // 将Json转换为st_subject结构体
  55. st_subject jsonToSt_subject(const QJsonObject& json) {
  56. st_subject subject;
  57. subject.subject_number = json["subject_number"].toInt();
  58. subject.subject_type = json["subject_type"].toInt();
  59. subject.subject_name = json["subject_name"].toString();
  60. // 从Base64字符串还原图片信息
  61. QString base64Image = json["image"].toString();
  62. QByteArray imageData = QByteArray::fromBase64(base64Image.toLatin1());
  63. QImage image;
  64. image.loadFromData(imageData); // 假设图片格式为PNG
  65. subject.image = image;
  66. // 根据题目类型提取对应的答案信息
  67. switch (subject.subject_type) {
  68. case 0: { // True or False
  69. QJsonObject trueFalseAnswerObj = json["subject_Type"].toObject();
  70. subject.subject_Type.trueOrfalse.banswer =
  71. trueFalseAnswerObj["banswer"].toBool();
  72. subject.subject_Type.trueOrfalse.banswer_standard =
  73. trueFalseAnswerObj["banswer_standard"].toBool();
  74. subject.subject_Type.trueOrfalse.bret =
  75. trueFalseAnswerObj["bret"].toBool();
  76. break;
  77. }
  78. case 1: { // Choose
  79. QJsonObject chooseAnswerObj = json["subject_Type"].toObject();
  80. subject.subject_Type.choose.banswer =
  81. chooseAnswerObj["banswer"].toInt();
  82. subject.subject_Type.choose.banswer_standard =
  83. chooseAnswerObj["banswer_standard"].toInt();
  84. subject.subject_Type.choose.bret =
  85. chooseAnswerObj["bret"].toBool();
  86. break;
  87. }
  88. case 2: { // Choose Multiple
  89. QJsonObject chooseMultipleAnswerObj = json["subject_Type"].toObject();
  90. QJsonArray banswerArray = chooseMultipleAnswerObj["banswer"].toArray();
  91. for (const QJsonValue& value : banswerArray) {
  92. subject.subject_Type.choose_multiple.banswer.append(value.toInt());
  93. }
  94. QJsonArray banswerStandardArray = chooseMultipleAnswerObj["banswer_standard"].toArray();
  95. for (const QJsonValue& value : banswerStandardArray) {
  96. subject.subject_Type.choose_multiple.banswer_standard.append(value.toInt());
  97. }
  98. subject.subject_Type.choose_multiple.bret =
  99. chooseMultipleAnswerObj["bret"].toBool();
  100. break;
  101. }
  102. }
  103. return subject;
  104. }

这样就可以使用这两个函数来进行结构体st_subject和Json之间的相互转化了。希望对你有帮助!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=18130

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?