qt 读写json格式的配置文件

要点

  1. QJsonObject 
  2. QJsonDocument
  3. QFile file(fileName);
  4. file.write(jsonDoc.toJson(QJsonDocument::Indented)); // 缩进格式化输出
  5. QByteArray jsonData = file.readAll(); 

在 Qt 中,读写 JSON 格式的配置文件通常使用 QJsonDocumentQJsonObjectQJsonArray 和 QFile 类。以下是一个简单的例子,展示了如何使用这些类来读写 JSON 文件。

写入 JSON 文件

#include <QFile>  
#include <QJsonDocument>  
#include <QJsonObject>  void writeJsonConfigFile(const QString &fileName) {  // 创建一个 QJsonObject  QJsonObject jsonObject;  jsonObject["user"] = QJsonObject {  {"name", "John Doe"},  {"age", 30},  {"email", "johndoe@example.com"}  };  // 将 QJsonObject 转换为 QJsonDocument  QJsonDocument jsonDoc(jsonObject);  // 写入文件  QFile file(fileName);  if (file.open(QIODevice::WriteOnly | QIODevice::Truncate)) {  file.write(jsonDoc.toJson(QJsonDocument::Indented)); // 缩进格式化输出  file.close();  }  
}

读取 JSON 文件

#include <QFile>  
#include <QJsonDocument>  
#include <QJsonObject>  
#include <QDebug>  QJsonObject readJsonConfigFile(const QString &fileName) {  QFile file(fileName);  if (!file.open(QIODevice::ReadOnly | QIODevice::Text))  return QJsonObject(); // 返回空对象或处理错误  // 读取文件内容  QByteArray jsonData = file.readAll();  QJsonParseError jsonError;  QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonData, &jsonError);  // 检查 JSON 解析是否成功  if (jsonError.error != QJsonParseError::NoError) {  qDebug() << "JSON 解析错误:" << jsonError.errorString();  return QJsonObject(); // 返回空对象或处理错误  }  // 假设顶层是一个 QJsonObject  return jsonDoc.object();  
}  // 使用示例  
void useJsonConfigFile(const QString &fileName) {  QJsonObject jsonObject = readJsonConfigFile(fileName);  if (!jsonObject.isEmpty()) {  QJsonObject userObject = jsonObject["user"].toObject();  QString name = userObject["name"].toString();  int age = userObject["age"].toInt();  qDebug() << "Name:" << name << ", Age:" << age;  }  
}

在这个例子中,writeJsonConfigFile 函数创建了一个包含用户信息的 QJsonObject,然后将其转换为一个 QJsonDocument 并写入文件。readJsonConfigFile 函数读取一个 JSON 文件,解析其内容,并返回一个 QJsonObject。如果解析过程中出现错误,它将返回一个空的 QJsonObject

请注意,这个例子假设 JSON 文件的顶层是一个对象。如果 JSON 文件以数组开始,你需要相应地调整代码来处理 QJsonArray

此外,错误处理在这个例子中是非常基础的。在实际应用中,你可能需要更复杂的错误处理逻辑,例如显示错误消息给用户或尝试恢复默认配置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/870046.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云开发技术的壁纸小程序源码,无需服务期无需域名

1、本款小程序为云开发版本&#xff0c;不需要服务器域名 2、文件内有图文搭建教程&#xff0c;小白也不用担心不会搭建。 3、本程序反应速度极快&#xff0c;拥有用户投稿、积分系统帮助各位老板更多盈利。 4、独家动态壁纸在线下载&#xff0c;给用户更多的选择 5、最新版套图…

Open3D 点云配准精度评价指标-RMSE

目录 一、概述 1.1RMSE的计算方法 1.2RMSE的评价标准 二、代码实现 三、实现效果 3.1原始点云 3.2计算数据 一、概述 均方根误差(RMSE, Root Mean Squared Error)是衡量两个点云之间平均误差的一个常用指标。它通过计算匹配点对之间距离的平方和的平方根,来…

有必要找第三方软件测评公司吗?如何选择靠谱软件测评机构?

软件测试是确保软件质量的重要环节&#xff0c;而在进行软件测试时&#xff0c;是否有必要找第三方软件测评公司呢?第三方软件测评公司是指独立于软件开发公司和用户之间的中立机构&#xff0c;专门从事软件测试和测评工作。与自身开发团队或内部测试团队相比&#xff0c;选择…

计算机的错误计算(二十七)

摘要 介绍错数&#xff1a;任给一个单变元函数&#xff0c;当自变量被截断时&#xff0c;函数值中含有的错误的有效数字个数&#xff0c;并给出其计算方法。 首先&#xff0c;从字面上看&#xff0c;错数表示错误的有效数字个数。 下面从一个略显粗糙的化简过程&#xff0c;推…

每天一个数据分析题(四百二十)- 一元线性回归模型

现在通过参数估计得到一个一元线性回归模型为y 3x4&#xff0c;在回归系数检验中下列说法错误的是&#xff08; &#xff09; A. 检验统计量是t统计量 B. 原假设是β13 C. 若拒绝原假设&#xff0c;就认为自变量与因变量存在显著的线性关系 D. 可以用P值与显著性水平比较结…

网络安全防御【防火墙安全策略用户认证综合实验】

目录 一、实验拓扑图 二、实验要求 三、实验思路 四、实验步骤 1、打开ensp防火墙的web服务&#xff08;带内管理的工作模式&#xff09; 2、在FW1的web网页中网络相关配置 3、交换机LSW6&#xff08;总公司&#xff09;的相关配置&#xff1a; 4、路由器相关接口配置&a…

多线程问题

什么是线程 线程是cpu调度和执行的单位&#xff0c;一个程序的运行伴随着的是一个进程的执行&#xff0c;而一个进程是由一个或多个线程来完成的&#xff0c;通过cpu调度资源在很短时间切换主线程和子线程并行&#xff0c;交替执行来做到看似多个线程同时进行的状态&#xff0…

java入门-告别C进入java世界

目标 java体系 java开发环境 helloworld java语法 java体系 java开发环境 安装JDK JDK&#xff1a; Java Developement Kit 配置jdk 为什么需要配置 操作系统找不到此程序 操作系统PATH PATH C:\Users\49354>echo %PATH% C:\Program Files (x86)\VMware\VMware Works…

windows信息收集和提权

目录 手动收集 工具收集 windows本地内核提权 本地提权 根据windows去找需要的exp进行利用 提权后结合mimikatz使用 msf提权 简单提权 生成后门 上线 BypassUAC绕过UAC提权 msf带的bypassuac模块可以尝试提权 Bypassuac提权命令操作 提权成功 ​local_exploi…

[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:841)

pip安装python库时报错问题解决 报错&#xff1a;[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:841) 解决&#xff1a; pip --trusted-host pypi.python.org install -r packagename&#xff08;包名&#xff09;

C# IOC容器、依赖注入和控制反转

控制反转&#xff08;Inversion of Control, IoC&#xff09; 定义&#xff1a;控制反转是一种设计原则&#xff0c;它反转了传统编程中的控制流程。在传统的编程模式中&#xff0c;组件之间的依赖关系是由组件自身在内部创建和维护的。而在控制反转模式中&#xff0c;这种依赖…

linux编写驱动程序常用API

在Linux设备驱动开发中&#xff0c;有许多常用的API&#xff0c;这些API提供了与内核和其他驱动程序交互的功能。以下是一些常见的Linux设备驱动开发API&#xff1a; 1. 设备注册与注销 register_chrdev_region(): 注册一个字符设备号范围。alloc_chrdev_region(): 动态分配一…

特斯拉的人形机器人最新展示,穿戴遥操作示教的机器人学习!

在机器人领域&#xff0c;特斯拉的人形机器人一直备受关注。2021 年&#xff0c;在「特斯拉 AI 日」上&#xff0c;马斯克发布了特斯拉的通用机器人计划&#xff0c;并用图片展示了人形机器人 Tesla Bot 的大致形态。但当时的 Tesla Bot 只是个概念&#xff0c;动作展示部分是由…

VSCode升级后不能打开在MacOS系统上

VSCode 在MacOS无法打开 版本 VSCode version: 1.91.0 (x64) 错误信息&#xff1a; MacBook-Pro ~ % /Users/mac/Downloads/FirefoxDownloads/Visual\ Studio\ Code.app/Contents/MacOS/Electron ; exit; [0710/142747.971951:ERROR:crash_report_database_mac.mm(753)] op…

西安明德理工学院师生莅临泰迪智能科技开展参观见习活动

为进一步深化校企合作&#xff0c;落实高校应用型人才培养。7月8日&#xff0c;西安明德理工学院与广东泰迪智能科技股份有限公司联合开展学生企业见习活动。西安明德理工学院金融产业学院副院长刘敏、金融学专业负责人张莉萍、金融学专业教师曹艳飞、赵浚妤、泰迪智能科技董事…

TCP中的2MSL详解

TCP中的2MSL时间 2MSL&#xff08;Maximum Segment Lifetime&#xff09;时间是TCP协议中一个非常重要的参数。MSL是一个TCP段在网络中可以存活的最长时间&#xff0c;2MSL就是两倍的这个时间。在TCP连接终止时&#xff0c;连接的两个端点需要等待2MSL时间&#xff0c;以确保所…

CinemachineBrain的属性简介

CinemachineBrain的属性简介 CinemachineBrain是Unity Cinemachine的核心组件&#xff0c;它和Camera组件挂载在一起&#xff0c;监控场景中所有的virtual camera。CinemachineBrain在inspector中暴露的属性如下&#xff1a; Live Camera和Live Blend分别表示当前active的virtu…

python-26-零基础自学python-如何创建文件、读取数据、处理多个文件及程序异常处理等

学习内容&#xff1a;《python编程&#xff1a;从入门到实践》第二版第10章 知识点&#xff1a; 程序异常如何处理&#xff1f;try-except-else 多个文件处理 创建文件&#xff1a;在文件中储存数据 练习内容&#xff1a; 练习10-8&#xff1a;猫和狗 创建文件cats.txt和…

YOLOv10改进 | Conv篇 | CVPR2024最新DynamicConv替换下采样(解决低FLOPs陷阱)

一、本文介绍 本文给大家带来的改进机制是CVPR2024的最新改进机制DynamicConv其是CVPR2024的最新改进机制&#xff0c;这个论文中介绍了一个名为ParameterNet的新型设计原则&#xff0c;它旨在在大规模视觉预训练模型中增加参数数量&#xff0c;同时尽量不增加浮点运算&#x…

训练营第八天 | 344.反转字符串、541. 反转字符串II、卡码网:54.替换数字

344.反转字符串 做题思路 双指针库函数的实现 代码细节 class Solution { public:// 库函数swap的实现void swapString(char& a, char& b) {char tmp a;a b;b tmp;}void reverseString(vector<char>& s) {// 双指针库函数int i, j;for(i 0, j s.siz…