当前位置: 首页 > news >正文

Qt 对 JSON和XML文件的操作详解


🌟 I. JSON 文件操作 (QJson - Part of Qt Core)

Qt 对 JSON 数据的支持集中在 Qt Core 模块的几个类中。JSON 因其轻量级和易于阅读的特性,常被用作现代应用程序的配置文件格式。

1. QJsonDocument:JSON 文档的封装

这是整个 JSON 文档的入口点,用于读写文件。

核心函数 (Function)作用描述示例用法
fromJson(const QByteArray &json)静态函数。 从 UTF-8 编码的字节数组中解析 JSON 文档,返回一个 QJsonDocument 对象。QJsonDocument::fromJson(data);
toJson(JsonFormat format = Compact)序列化。 将文档内容转换为 QByteArray(UTF-8 编码)。Compact(紧凑)或 Indented(格式化)。doc.toJson(QJsonDocument::Indented);
isObject() / isArray()检查类型。 检查文档的根是否为 JSON 对象或 JSON 数组。if (doc.isObject()) { ... }
object() / array()获取根元素。 返回文档的根 QJsonObjectQJsonArrayQJsonObject root = doc.object();
fromVariant()静态函数。 从 Qt 通用数据容器 QVariant 转换为 QJsonDocumentN/A

2. QJsonObject:JSON 对象的封装

表示 JSON 中的 {} 结构(键值对的集合)。

核心函数 (Function)作用描述示例用法
insert(const QString &key, const QJsonValue &value)插入/修改键值对。 插入或更新一个键对应的值。obj.insert("Name", "Alice");
value(const QString &key)获取值。 通过键获取对应的 QJsonValue 对象。QJsonValue val = obj.value("Age");
contains(const QString &key)检查键是否存在。if (obj.contains("ID")) { ... }
remove(const QString &key)删除键值对。obj.remove("TempKey");
keys()获取键列表。 返回所有键的 QStringListQStringList keys = obj.keys();

3. QJsonArray:JSON 数组的封装

表示 JSON 中的 [] 结构(值的有序集合)。

核心函数 (Function)作用描述示例用法
append(const QJsonValue &value)添加元素。 在数组末尾添加一个值。array.append(10);
insert(int index, const QJsonValue &value)插入元素。 在指定索引处插入一个值。array.insert(0, "Start");
at(int index)访问元素。 获取指定索引处的 QJsonValue 对象。QJsonValue val = array.at(i);
size()获取大小。 返回数组中元素的数量。for (int i = 0; i < array.size(); ++i)

4. QJsonValue:JSON 值的通用封装

表示 JSON 中的任何基本类型(字符串、数字、布尔、Null)或结构(对象、数组)。

核心函数 (Function)作用描述示例用法
isString() / isBool() / isDouble()判断类型。 检查封装的值的类型。if (val.isString()) { ... }
toString() / toInt() / toBool()转换为 C++ 类型。 将 JSON 值转换为对应的 C++ 基本数据类型。QString s = val.toString();
toObject() / toArray()转换为结构。 将值转换为 QJsonObjectQJsonArrayQJsonObject subObj = val.toObject();

⚙️ II. XML 文件操作 (Qt Xml 模块)

XML 通常用于较复杂的配置结构或需要大量属性的场景。Qt Xml 模块提供了两种主要的解析方式:DOM (Document Object Model) 和 SAX (Simple API for XML)。

在配置文件的读写中,DOM 方式因其能快速构建和修改整个树结构而更常用。

1. DOM 方式:QDomDocument

DOM 方式将整个 XML 文件加载到内存中,表示为一个节点树。

核心类 (Class)核心函数 (Function)作用描述
QDomDocumentXML 文档的封装。setContent(const QByteArray &data): 从数据加载整个 XML 文档(用于读取)。
toString(): 将文档转换为 XML 格式的 QString(用于写入)。
createElement(const QString &tagName): 创建一个新的 XML 元素节点。
createTextNode(const QString &text): 创建一个新的文本节点。
QDomElementXML 元素(标签)的封装。setAttribute(const QString &name, const QString &value): 设置元素的属性值。
attribute(const QString &name): 获取元素的属性值。
tagName(): 获取元素的标签名称。
firstChildElement(const QString &tagName = QString()): 获取第一个子元素(可选按名称)。
nextSiblingElement(): 获取同级下一个元素。
QDomNode所有 XML 节点(元素、属性、文本等)的基类。appendChild(const QDomNode &newChild): 添加一个子节点。
toElement(): 转换为 QDomElement(安全)。

XML 配置文件的基本读写流程

写入 (Write)
  1. 创建一个 QDomDocument 对象。
  2. 使用 createElement()setAttribute() 创建根元素和子元素。
  3. 使用 appendChild() 将节点连接成树。
  4. 使用 toString() 转换为 QString
  5. 使用 QFileQString 写入文件。
读取 (Read)
  1. 使用 QFile 读取 XML 文件内容到 QByteArray
  2. 调用 QDomDocument::setContent() 加载数据。
  3. 使用 documentElement() 获取根元素。
  4. 使用 firstChildElement()nextSiblingElement() 遍历树结构,使用 attribute() 读取配置值。

📝 总结:配置文件 I/O 流程

无论是 JSON 还是 XML,完整的配置文件操作都需要结合 Qt Core 的文件 I/O 能力:

  1. 读取: QFile::open() -> QFile::readAll() -> QJsonDocument::fromJson()QDomDocument::setContent() -> 处理数据。
  2. 写入: 创建/修改 QJsonObject / QDomDocument -> QJsonDocument::toJson()QDomDocument::toString() -> QFile::open() -> QFile::write() -> QFile::close()
http://www.dtcms.com/a/613847.html

相关文章:

  • flash网站开发广州门户网站制作公司
  • VideoPipe中集成多模态大模型做视频(图片)分析
  • 网站推广优化排名seo建设网站论文
  • Halcon HDevelop 核心语法与实战笔记
  • 网站开发需要的资料高级网站开发工程师工资
  • (6)框架搭建:Qt实战项目之主窗体工具条
  • 购物网站建设和使用东莞公司展厅设计公司
  • Android协程 vs. 传统线程/线程池:现代化异步编程的演进
  • 【编程】脚本编写入门:从零到一的自动化之旅
  • 自动化测试用例编写详解
  • ASC学习笔记0017:返回此能力系统组件的所有属性列表
  • Python可迭代对象讲解
  • 开源项目分享:Gitee热榜项目 2025年11月第三周 周榜
  • 哪里可做网站优化推广网站seo
  • Java Web 项目中Maven 常用库
  • 私人做网站图片网络科技有限公司怎么挣钱
  • 人力资源网站怎么做网络维护是什么职业
  • 体育直播/赛事直播/电竞直播/游戏直播/录播转播/原生APP/赛程比分系统
  • 学Java第四十五天——斗地主小游戏创作
  • 怎样创建一个国际网站wordpress外观菜单
  • 【总结】计网 IPv6
  • 【动态高斯重建】论文集合:从4DGT到OMG4、4DSioMo
  • 【ASR论文】Zipformer:更快、更强的语音识别编码器 | 小米公司
  • 从零开始学二叉树(上):树的初识 —— 从文件系统到树的基本概念
  • wordpress做网站卡吗服装企业 北京 网站建设
  • wordpress站点地址没更改wordpress 百秀主题
  • Foreign Function Interface
  • 在线C语言编译器 | 提供快速高效的C语言编程环境
  • 11月15日星期六今日早报简报微语报早读
  • 发电机组和负荷模型