经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C++ » 查看文章
C/C++ Qt 运用JSON解析库 [解析篇]
来源:cnblogs  作者:lyshark  时间:2022/1/17 11:12:41  对本文有异议

JSON是一种简单的轻量级数据交换格式,Qt库为JSON的相关操作提供了完整的类支持,使用JSON解析文件之前需要先通过TextStream流将文件读入到字符串变量内,然后再通过QJsonDocument等库对该JSON格式进行解析,以提取出我们所需字段。

首先创建一个解析文件,命名为config.json我们将通过代码依次解析这个JSON文件中的每一个参数,具体解析代码如下:

  1. {
  2. "blog": "https://www.cnblogs.com/lyshark",
  3. "enable": true,
  4. "status": 1024,
  5. "GetDict": {"address":"192.168.1.1","username":"root","password":"123456","update":"2020-09-26"},
  6. "GetList": [1,2,3,4,5,6,7,8,9,0],
  7. "ObjectInArrayJson":
  8. {
  9. "One": ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],
  10. "Two": ["Sunday","Monday","Tuesday"]
  11. },
  12. "ArrayJson": [
  13. ["192.168.1.1","root","22"],
  14. ["192.168.1.2","root","23"],
  15. ["192.168.1.3","root","24"],
  16. ["192.168.1.4","root","25"],
  17. ["192.168.1.5","root","26"]
  18. ],
  19. "ObjectJson": [
  20. {"address":"192.168.1.1","username":"admin"},
  21. {"address":"192.168.1.2","username":"root"},
  22. {"address":"192.168.1.3","username":"lyshark"}
  23. ],
  24. "ObjectArrayJson": [
  25. {"uname":"root","ulist":[1,2,3,4,5]},
  26. {"uname":"lyshark","ulist":[11,22,33,44,55,66,77,88,99]}
  27. ],
  28. "NestingObjectJson": [
  29. {
  30. "uuid": "1001",
  31. "basic": {
  32. "lat": "12.657",
  33. "lon": "55.789"
  34. }
  35. },
  36. {
  37. "uuid": "1002",
  38. "basic": {
  39. "lat": "31.24",
  40. "lon": "25.55"
  41. }
  42. }
  43. ],
  44. "ArrayNestingArrayJson":
  45. [
  46. {
  47. "telephone": "1323344521",
  48. "path": [
  49. [
  50. 11.5,22.4,56.9
  51. ],
  52. [
  53. 19.4,34.6,44.7
  54. ]
  55. ]
  56. }
  57. ]
  58. }

首先实现读写文本文件,通过QT中封装的<QFile>库可实现对文本文件的读取操作,读取JSON文件可使用该方式.

  1. #include <QCoreApplication>
  2. #include <iostream>
  3. #include <QString>
  4. #include <QTextStream>
  5. #include <QFile>
  6. #include <QDir>
  7. #include <QFileInfo>
  8. #include <QJsonDocument>
  9. #include <QJsonParseError>
  10. #include <QJsonObject>
  11. #include <QJsonArray>
  12. #include <QJsonValue>
  13. #include <QJsonValueRef>
  14. // 传入文本路径,读取并输出
  15. // https://www.cnblogs.com/lyshark
  16. int readonly_string_file(QString file_path)
  17. {
  18. QFile this_file_ptr(file_path);
  19. // 判断文件是否存在
  20. if(false == this_file_ptr.exists())
  21. {
  22. std::cout << "文件不存在" << std::endl;
  23. return 0;
  24. }
  25. /*
  26. * 文件打开属性包括如下
  27. * QIODevice::ReadOnly 只读方式打开
  28. * QIODevice::WriteOnly 写入方式打开
  29. * QIODevice::ReadWrite 读写方式打开
  30. * QIODevice::Append 追加方式打开
  31. * QIODevice::Truncate 截取方式打开
  32. * QIODevice::Text 文本方式打开
  33. */
  34. if(false == this_file_ptr.open(QIODevice::ReadOnly | QIODevice::Text))
  35. {
  36. std::cout << "打开失败" << std::endl;
  37. return 0;
  38. }
  39. // 读取到文本中的字符串
  40. QString string_value = this_file_ptr.readAll();
  41. std::cout << "读入长度: " << this_file_ptr.size() << std::endl;
  42. std::cout << "字符串: " << string_value.toStdString() << std::endl;
  43. this_file_ptr.close();
  44. }
  45. // 逐行读取文本文件
  46. void read_line_file()
  47. {
  48. QFile this_file_ptr("d:/config.json");
  49. if(this_file_ptr.open((QIODevice::ReadOnly | QIODevice::Text)))
  50. {
  51. QByteArray byte_array;
  52. while(false == this_file_ptr.atEnd())
  53. {
  54. byte_array += this_file_ptr.readLine();
  55. }
  56. std::cout << "完整文本: " << QString(byte_array).toStdString() << std::endl;
  57. this_file_ptr.close();
  58. }
  59. }
  60. // 传入文本路径与写入内容,写入到文件
  61. // https://www.cnblogs.com/lyshark
  62. void write_string_file(QString file_path, QString string_value)
  63. {
  64. QFile this_file_ptr(file_path);
  65. // 判断文件是否存在
  66. if(false == this_file_ptr.exists())
  67. {
  68. return;
  69. }
  70. // 打开失败
  71. if(false == this_file_ptr.open(QIODevice::ReadWrite | QIODevice::Text))
  72. {
  73. return;
  74. }
  75. //写入内容,注意需要转码,否则会报错
  76. QByteArray write_string = string_value.toUtf8();
  77. //写入QByteArray格式字符串
  78. this_file_ptr.write(write_string);
  79. this_file_ptr.close();
  80. }
  81. // 计算文件或目录大小
  82. unsigned int GetFileSize(QString path)
  83. {
  84. QFileInfo info(path);
  85. unsigned int ret = 0;
  86. if(info.isFile())
  87. {
  88. ret = info.size();
  89. }
  90. else if(info.isDir())
  91. {
  92. QDir dir(path);
  93. QFileInfoList list = dir.entryInfoList();
  94. for(int i = 0; i < list.count(); i++)
  95. {
  96. if((list[i].fileName() != ".") && (list[i].fileName() != ".."))
  97. {
  98. ret += GetFileSize(list[i].absoluteFilePath());
  99. }
  100. }
  101. }
  102. return ret;
  103. }
  104. int main(int argc, char *argv[])
  105. {
  106. QCoreApplication a(argc, argv);
  107. // 读取文件
  108. readonly_string_file("d:/config.json");
  109. // 计算文件或目录大小
  110. unsigned int file_size = GetFileSize("d:/xunjian");
  111. std::cout << "获取文件或目录大小: " << file_size << std::endl;
  112. // 覆盖写入文件
  113. QString write_file_path = "d:/test.json";
  114. QString write_string = "hello lyshark";
  115. write_string_file(write_file_path,write_string);
  116. return a.exec();
  117. }

实现解析根对象中的单一键值对,例如解析配置文件中的blog,enable,status等这些独立的字段值.

  1. // 读取JSON文本
  2. // https://www.cnblogs.com/lyshark
  3. QString readonly_string(QString file_path)
  4. {
  5. QFile this_file_ptr(file_path);
  6. if(false == this_file_ptr.exists())
  7. {
  8. return "None";
  9. }
  10. if(false == this_file_ptr.open(QIODevice::ReadOnly | QIODevice::Text))
  11. {
  12. return "None";
  13. }
  14. QString string_value = this_file_ptr.readAll();
  15. this_file_ptr.close();
  16. return string_value;
  17. }
  18. int main(int argc, char *argv[])
  19. {
  20. QCoreApplication a(argc, argv);
  21. // 读取文件
  22. QString config = readonly_string("d:/config.json");
  23. if(config == "None")
  24. {
  25. return 0;
  26. }
  27. // 字符串格式化为JSON
  28. QJsonParseError err_rpt;
  29. QJsonDocument root_document = QJsonDocument::fromJson(config.toUtf8(), &err_rpt);
  30. if(err_rpt.error != QJsonParseError::NoError)
  31. {
  32. std::cout << "JSON格式错误" << std::endl;
  33. return 0;
  34. }
  35. // 获取到Json字符串的根节点
  36. QJsonObject root_object = root_document.object();
  37. // 解析blog字段
  38. QString blog = root_object.find("blog").value().toString();
  39. std::cout << "字段对应的值 = > "<< blog.toStdString() << std::endl;
  40. // 解析enable字段
  41. bool enable = root_object.find("enable").value().toBool();
  42. std::cout << "是否开启状态: " << enable << std::endl;
  43. // 解析status字段
  44. int status = root_object.find("status").value().toInt();
  45. std::cout << "状态数值: " << status << std::endl;
  46. return a.exec();
  47. }

实现解析简单的单对象单数组结构,如上配置文件中的GetDictGetList既是我们需要解析的内容.

  1. // 读取JSON文本
  2. QString readonly_string(QString file_path)
  3. {
  4. QFile this_file_ptr(file_path);
  5. if(false == this_file_ptr.exists())
  6. {
  7. return "None";
  8. }
  9. if(false == this_file_ptr.open(QIODevice::ReadOnly | QIODevice::Text))
  10. {
  11. return "None";
  12. }
  13. QString string_value = this_file_ptr.readAll();
  14. this_file_ptr.close();
  15. return string_value;
  16. }
  17. // https://www.cnblogs.com/lyshark
  18. int main(int argc, char *argv[])
  19. {
  20. QCoreApplication a(argc, argv);
  21. // 读取文件
  22. QString config = readonly_string("d:/config.json");
  23. if(config == "None")
  24. {
  25. return 0;
  26. }
  27. // 字符串格式化为JSON
  28. QJsonParseError err_rpt;
  29. QJsonDocument root_document = QJsonDocument::fromJson(config.toUtf8(), &err_rpt);
  30. if(err_rpt.error != QJsonParseError::NoError)
  31. {
  32. std::cout << "JSON格式错误" << std::endl;
  33. return 0;
  34. }
  35. // 获取到Json字符串的根节点
  36. QJsonObject root_object = root_document.object();
  37. // 解析单一对象
  38. QJsonObject get_dict_ptr = root_object.find("GetDict").value().toObject();
  39. QVariantMap map = get_dict_ptr.toVariantMap();
  40. if(map.contains("address") && map.contains("username") && map.contains("password") && map.contains("update"))
  41. {
  42. QString address = map["address"].toString();
  43. QString username = map["username"].toString();
  44. QString password = map["password"].toString();
  45. QString update = map["update"].toString();
  46. std::cout
  47. << " 地址: " << address.toStdString()
  48. << " 用户名: " << username.toStdString()
  49. << " 密码: " << password.toStdString()
  50. << " 更新日期: " << update.toStdString()
  51. << std::endl;
  52. }
  53. // 解析单一数组
  54. QJsonArray get_list_ptr = root_object.find("GetList").value().toArray();
  55. for(int index=0; index < get_list_ptr.count(); index++)
  56. {
  57. int ref_value = get_list_ptr.at(index).toInt();
  58. std::cout << "输出数组元素: " << ref_value << std::endl;
  59. }
  60. return a.exec();
  61. }

实现解析对象嵌套对象对象中嵌套数组结构,如上配置文件中的ObjectInArrayJson既是我们需要解析的内容.

  1. // 读取JSON文本
  2. // https://www.cnblogs.com/lyshark
  3. QString readonly_string(QString file_path)
  4. {
  5. QFile this_file_ptr(file_path);
  6. if(false == this_file_ptr.exists())
  7. {
  8. return "None";
  9. }
  10. if(false == this_file_ptr.open(QIODevice::ReadOnly | QIODevice::Text))
  11. {
  12. return "None";
  13. }
  14. QString string_value = this_file_ptr.readAll();
  15. this_file_ptr.close();
  16. return string_value;
  17. }
  18. int main(int argc, char *argv[])
  19. {
  20. QCoreApplication a(argc, argv);
  21. // 读取文件
  22. QString config = readonly_string("d:/config.json");
  23. if(config == "None")
  24. {
  25. return 0;
  26. }
  27. // 字符串格式化为JSON
  28. QJsonParseError err_rpt;
  29. QJsonDocument root_document = QJsonDocument::fromJson(config.toUtf8(), &err_rpt);
  30. if(err_rpt.error != QJsonParseError::NoError)
  31. {
  32. std::cout << "JSON格式错误" << std::endl;
  33. return 0;
  34. }
  35. // 获取到Json字符串的根节点
  36. QJsonObject root_object = root_document.object();
  37. // 找到Object对象
  38. QJsonObject one_object_json = root_object.find("ObjectInArrayJson").value().toObject();
  39. // 转为MAP映射
  40. QVariantMap map = one_object_json.toVariantMap();
  41. // 寻找One键
  42. QJsonArray array_one = map["One"].toJsonArray();
  43. for(int index=0; index < array_one.count(); index++)
  44. {
  45. QString value = array_one.at(index).toString();
  46. std::cout << "One => "<< value.toStdString() << std::endl;
  47. }
  48. // 寻找Two键
  49. QJsonArray array_two = map["Two"].toJsonArray();
  50. for(int index=0; index < array_two.count(); index++)
  51. {
  52. QString value = array_two.at(index).toString();
  53. std::cout << "Two => "<< value.toStdString() << std::endl;
  54. }
  55. return a.exec();
  56. }

实现解析数组中的数组结构,如上配置文件中的ArrayJson既是我们需要解析的内容.

  1. // 读取JSON文本
  2. QString readonly_string(QString file_path)
  3. {
  4. QFile this_file_ptr(file_path);
  5. if(false == this_file_ptr.exists())
  6. {
  7. return "None";
  8. }
  9. if(false == this_file_ptr.open(QIODevice::ReadOnly | QIODevice::Text))
  10. {
  11. return "None";
  12. }
  13. QString string_value = this_file_ptr.readAll();
  14. this_file_ptr.close();
  15. return string_value;
  16. }
  17. // https://www.cnblogs.com/lyshark
  18. int main(int argc, char *argv[])
  19. {
  20. QCoreApplication a(argc, argv);
  21. // 读取文件
  22. QString config = readonly_string("d:/config.json");
  23. if(config == "None")
  24. {
  25. return 0;
  26. }
  27. // 字符串格式化为JSON
  28. QJsonParseError err_rpt;
  29. QJsonDocument root_document = QJsonDocument::fromJson(config.toUtf8(), &err_rpt);
  30. if(err_rpt.error != QJsonParseError::NoError)
  31. {
  32. std::cout << "json 格式错误" << std::endl;
  33. return 0;
  34. }
  35. // 获取到Json字符串的根节点
  36. QJsonObject root_object = root_document.object();
  37. // 获取MyJson数组
  38. QJsonValue array_value = root_object.value("ArrayJson");
  39. // 验证节点是否为数组
  40. if(array_value.isArray())
  41. {
  42. // 得到数组个数
  43. int array_count = array_value.toArray().count();
  44. // 循环数组个数
  45. for(int index=0;index <= array_count;index++)
  46. {
  47. QJsonValue parset = array_value.toArray().at((index));
  48. if(parset.isArray())
  49. {
  50. QString address = parset.toArray().at(0).toString();
  51. QString username = parset.toArray().at(1).toString();
  52. QString userport = parset.toArray().at(2).toString();
  53. std::cout
  54. << "地址: " << address.toStdString()
  55. << " 用户名: " << username.toStdString()
  56. << " 端口号: " << userport.toStdString()
  57. << std::endl;
  58. }
  59. }
  60. }
  61. return a.exec();
  62. }

实现解析数组中的多对象结构,如上配置文件中的ObjectJson既是我们需要解析的内容.

  1. // 读取JSON文本
  2. // https://www.cnblogs.com/lyshark
  3. QString readonly_string(QString file_path)
  4. {
  5. QFile this_file_ptr(file_path);
  6. if(false == this_file_ptr.exists())
  7. {
  8. return "None";
  9. }
  10. if(false == this_file_ptr.open(QIODevice::ReadOnly | QIODevice::Text))
  11. {
  12. return "None";
  13. }
  14. QString string_value = this_file_ptr.readAll();
  15. this_file_ptr.close();
  16. return string_value;
  17. }
  18. int main(int argc, char *argv[])
  19. {
  20. QCoreApplication a(argc, argv);
  21. // 读取文件
  22. QString config = readonly_string("d:/config.json");
  23. if(config == "None")
  24. {
  25. return 0;
  26. }
  27. // 字符串格式化为JSON
  28. QJsonParseError err_rpt;
  29. QJsonDocument root_document = QJsonDocument::fromJson(config.toUtf8(), &err_rpt);
  30. if(err_rpt.error != QJsonParseError::NoError)
  31. {
  32. std::cout << "json 格式错误" << std::endl;
  33. return 0;
  34. }
  35. // 获取到Json字符串的根节点
  36. QJsonObject root_object = root_document.object();
  37. // 获取MyJson数组
  38. QJsonValue object_value = root_object.value("ObjectJson");
  39. // 验证是否为数组
  40. if(object_value.isArray())
  41. {
  42. // 获取对象个数
  43. int object_count = object_value.toArray().count();
  44. // 循环个数
  45. for(int index=0;index <= object_count;index++)
  46. {
  47. QJsonObject obj = object_value.toArray().at(index).toObject();
  48. // 验证数组不为空
  49. if(!obj.isEmpty())
  50. {
  51. QString address = obj.value("address").toString();
  52. QString username = obj.value("username").toString();
  53. std::cout << "地址: " << address.toStdString() << " 用户: " << username.toStdString() << std::endl;
  54. }
  55. }
  56. }
  57. return a.exec();
  58. }

实现解析数组中对象中的嵌套数组结构,如上配置文件中的ObjectArrayJson既是我们需要解析的内容.

  1. // 读取JSON文本
  2. // https://www.cnblogs.com/lyshark
  3. QString readonly_string(QString file_path)
  4. {
  5. QFile this_file_ptr(file_path);
  6. if(false == this_file_ptr.exists())
  7. {
  8. return "None";
  9. }
  10. if(false == this_file_ptr.open(QIODevice::ReadOnly | QIODevice::Text))
  11. {
  12. return "None";
  13. }
  14. QString string_value = this_file_ptr.readAll();
  15. this_file_ptr.close();
  16. return string_value;
  17. }
  18. int main(int argc, char *argv[])
  19. {
  20. QCoreApplication a(argc, argv);
  21. // 读取文件
  22. QString config = readonly_string("d:/config.json");
  23. if(config == "None")
  24. {
  25. return 0;
  26. }
  27. // 字符串格式化为JSON
  28. // https://www.cnblogs.com/lyshark
  29. QJsonParseError err_rpt;
  30. QJsonDocument root_document = QJsonDocument::fromJson(config.toUtf8(), &err_rpt);
  31. if(err_rpt.error != QJsonParseError::NoError)
  32. {
  33. std::cout << "json 格式错误" << std::endl;
  34. return 0;
  35. }
  36. // 获取到Json字符串的根节点
  37. QJsonObject root_object = root_document.object();
  38. // 获取MyJson数组
  39. QJsonValue object_value = root_object.value("ObjectArrayJson");
  40. // 验证是否为数组
  41. if(object_value.isArray())
  42. {
  43. // 获取对象个数
  44. int object_count = object_value.toArray().count();
  45. // 循环个数
  46. for(int index=0;index <= object_count;index++)
  47. {
  48. QJsonObject obj = object_value.toArray().at(index).toObject();
  49. // 验证数组不为空
  50. if(!obj.isEmpty())
  51. {
  52. QString uname = obj.value("uname").toString();
  53. std::cout << "用户名: " << uname.toStdString() << std::endl;
  54. // 解析该用户的数组
  55. int array_count = obj.value("ulist").toArray().count();
  56. std::cout << "数组个数: "<< array_count << std::endl;
  57. for(int index=0;index < array_count;index++)
  58. {
  59. QJsonValue parset = obj.value("ulist").toArray().at(index);
  60. int val = parset.toInt();
  61. std::cout << "Value = > "<< val << std::endl;
  62. }
  63. }
  64. }
  65. }
  66. return a.exec();
  67. }

实现解析数组嵌套匿名对象嵌套对象结构,如上配置文件中的NestingObjectJson既是我们需要解析的内容.

  1. // 读取JSON文本
  2. QString readonly_string(QString file_path)
  3. {
  4. QFile this_file_ptr(file_path);
  5. if(false == this_file_ptr.exists())
  6. {
  7. return "None";
  8. }
  9. if(false == this_file_ptr.open(QIODevice::ReadOnly | QIODevice::Text))
  10. {
  11. return "None";
  12. }
  13. QString string_value = this_file_ptr.readAll();
  14. this_file_ptr.close();
  15. return string_value;
  16. }
  17. int main(int argc, char *argv[])
  18. {
  19. QCoreApplication a(argc, argv);
  20. // 读取文件
  21. // https://www.cnblogs.com/lyshark
  22. QString config = readonly_string("d:/config.json");
  23. if(config == "None")
  24. {
  25. return 0;
  26. }
  27. // 字符串格式化为JSON
  28. QJsonParseError err_rpt;
  29. QJsonDocument root_document = QJsonDocument::fromJson(config.toUtf8(), &err_rpt);
  30. if(err_rpt.error != QJsonParseError::NoError)
  31. {
  32. std::cout << "json 格式错误" << std::endl;
  33. return 0;
  34. }
  35. // 获取到Json字符串的根节点
  36. QJsonObject root_object = root_document.object();
  37. // 获取NestingObjectJson数组
  38. QJsonValue array_value = root_object.value("NestingObjectJson");
  39. // 验证节点是否为数组
  40. if(array_value.isArray())
  41. {
  42. // 得到内部对象个数
  43. int count = array_value.toArray().count();
  44. std::cout << "对象个数: " << count << std::endl;
  45. for(int index=0; index < count; index++)
  46. {
  47. // 得到数组中的index下标中的对象
  48. QJsonObject array_object = array_value.toArray().at(index).toObject();
  49. // 开始解析basic中的数据
  50. QJsonObject basic = array_object.value("basic").toObject();
  51. QString lat = basic.value("lat").toString();
  52. QString lon = basic.value("lon").toString();
  53. std::cout << "解析basic中的lat字段: " << lat.toStdString() << std::endl;
  54. std::cout << "解析basic中的lon字段: " << lon.toStdString()<< std::endl;
  55. // 解析单独字段
  56. QString status = array_object.value("status").toString();
  57. std::cout << "解析字段状态: " << status.toStdString() << std::endl;
  58. }
  59. }
  60. return a.exec();
  61. }

实现解析数组嵌套对象对象内嵌套双层数组结构,如上配置文件中的ArrayNestingArrayJson既我们需要解析的内容.

  1. // 读取JSON文本
  2. QString readonly_string(QString file_path)
  3. {
  4. QFile this_file_ptr(file_path);
  5. if(false == this_file_ptr.exists())
  6. {
  7. return "None";
  8. }
  9. if(false == this_file_ptr.open(QIODevice::ReadOnly | QIODevice::Text))
  10. {
  11. return "None";
  12. }
  13. QString string_value = this_file_ptr.readAll();
  14. this_file_ptr.close();
  15. return string_value;
  16. }
  17. int main(int argc, char *argv[])
  18. {
  19. QCoreApplication a(argc, argv);
  20. // 读取文件
  21. // https://www.cnblogs.com/lyshark
  22. QString config = readonly_string("d:/config.json");
  23. if(config == "None")
  24. {
  25. return 0;
  26. }
  27. // 字符串格式化为JSON
  28. QJsonParseError err_rpt;
  29. QJsonDocument root_document = QJsonDocument::fromJson(config.toUtf8(), &err_rpt);
  30. if(err_rpt.error != QJsonParseError::NoError)
  31. {
  32. std::cout << "json 格式错误" << std::endl;
  33. return 0;
  34. }
  35. // 获取到Json字符串的根节点
  36. QJsonObject root_object = root_document.object();
  37. // 获取NestingObjectJson数组
  38. QJsonValue array_value = root_object.value("ArrayNestingArrayJson");
  39. // 验证节点是否为数组
  40. if(array_value.isArray())
  41. {
  42. // 得到数组中的0号下标中的对象
  43. QJsonObject array_object = array_value.toArray().at(0).toObject();
  44. // 解析手机号字符串
  45. QString telephone = array_object.value("telephone").toString();
  46. std::cout << "手机号: " << telephone.toStdString() << std::endl;
  47. // 定位外层数组
  48. QJsonArray root_array = array_object.find("path").value().toArray();
  49. std::cout << "外层循环计数: " << root_array.count() << std::endl;
  50. for(int index=0; index < root_array.count(); index++)
  51. {
  52. // 定位内层数组
  53. QJsonArray sub_array = root_array.at(index).toArray();
  54. std::cout << "内层循环计数: "<< sub_array.count() << std::endl;
  55. for(int sub_count=0; sub_count < sub_array.count(); sub_count++)
  56. {
  57. // 每次取出最里层数组元素
  58. float var = sub_array.toVariantList().at(sub_count).toFloat();
  59. std::cout << "输出元素: " << var << std::endl;
  60. // std::cout << sub_array.toVariantList().at(0).toFloat() << std::endl;
  61. }
  62. }
  63. }
  64. return a.exec();
  65. }
文章出处:https://www.cnblogs.com/LyShark/p/15769760.html
版权声明:本博客文章与代码均为学习时整理的笔记,博客中除去明确标注有参考文献的文章,其他文章 [均为原创] 作品,转载请 [添加出处] ,您添加出处是我创作的动力!

如果您恶意转载本人文章并被本人发现,则您的整站文章,将会变为我的原创作品,请相互尊重 !

原文链接:http://www.cnblogs.com/LyShark/p/15769760.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号