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

三十二、服务应用操作

三十二、服务应用操作

32.1 INI文件操作

        .ini文件是Initialization File 的缩写,即初始化文件,是Windows的系统配置文件所采用的存储格式。

        文件扩展名:配置文件名称.ini。比如项目中的配置文件是整个项目共用的。例如,数据库配置.ini。

INI文件由节、键、值三个部分组成:

[section(节)]

参数

name=value;(键=值)

注意:分号表示(在分号后面的相关字符等信息,直到该行结尾都全部为注解内容)

实现以下功能

#include<QSettings>
#include<QtDebug>

// 写入 INI 文件的函数
void WriteIniFiles()
{
    // 创建一个 QSettings 对象,用于写入 INI 文件,文件名为 MySQLfiles.ini,文件格式为 INI 格式
    QSettings *WriteIniFiles = new QSettings("MySQLfiles.ini",QSettings::IniFormat);

    // 向 INI 文件的 /database/ip 节点写入 IP 地址
    WriteIniFiles->setValue("/database/ip","192.168.12.189");
    // 向 INI 文件的 /database/port 节点写入端口号
    WriteIniFiles->setValue("/database/port","3308");

    // 释放 QSettings 对象的内存
    delete WriteIniFiles;
}

// 读取 INI 文件的函数
void ReadIniFiles()
{
    // 创建一个 QSettings 对象,用于读取 INI 文件,文件名为 MySQLfiles.ini,文件格式为 INI 格式
    QSettings *ReadIniFiles = new QSettings("MySQLfiles.ini",QSettings::IniFormat);

    // 从 INI 文件的 /database/ip 节点读取 IP 地址,并将其转换为 QString 类型
    QString strIp = ReadIniFiles->value("/database/ip").toString();
    // 从 INI 文件的 /database/port 节点读取端口号,并将其转换为 QString 类型
    QString strPort = ReadIniFiles->value("/database/port").toString();

    // 打印 IP 地址,使用 toUtf8().data() 转换为 char* 类型
    qDebug()<<strIp.toUtf8().data();
    // 打印端口号,使用 toUtf8().data() 转换为 char* 类型
    qDebug()<<strPort.toUtf8().data();
}

// 读取 INI 文件中的所有键值对的函数
void ReadIniFilesIsKey()
{
    // 创建一个 QSettings 对象,用于读取 INI 文件,文件名为 MySQLfiles.ini,文件格式为 INI 格式
    QSettings setting("./MySQLfiles.ini",QSettings::IniFormat);

    // 遍历 INI 文件中的所有键
    foreach(QString key,setting.allKeys())
    {
        // 打印键和对应的值,将它们都转换为 char* 类型
        qDebug()<<key.toUtf8().data()<<":"<<setting.value(key).toString().toUtf8().data();
    }
}
  • WriteIniFiles 函数:
    • QSettings *WriteIniFiles = new QSettings("MySQLfiles.ini",QSettings::IniFormat);:使用 QSettings 类创建一个对象 WriteIniFiles,该对象将操作 MySQLfiles.ini 文件,文件格式为 IniFormat,使用动态分配内存的方式创建对象。
    • WriteIniFiles->setValue("/database/ip","192.168.12.189");:使用 setValue 方法将键 /database/ip 对应的值设置为 "192.168.12.189",存储在 MySQLfiles.ini 文件中。
    • WriteIniFiles->setValue("/database/port","3308");:类似地,将键 /database/port 对应的值设置为 "3308"
    • delete WriteIniFiles;:释放为 WriteIniFiles 对象分配的内存。
  • ReadIniFiles 函数:
    • QSettings *ReadIniFiles = new QSettings("MySQLfiles.ini",QSettings::IniFormat);:创建一个 QSettings 对象 ReadIniFiles 用于读取 MySQLfiles.ini 文件。
    • QString strIp = ReadIniFiles->value("/database/ip").toString();:通过 value 方法读取 /database/ip 键对应的值,并将其转换为 QString 类型存储在 strIp 中。
    • QString strPort = ReadIniFiles->value("/database/port").toString();:读取 /database/port 键对应的值存储在 strPort 中。
    • qDebug()<<strIp.toUtf8().data(); 和 qDebug()<<strPort.toUtf8().data();:将读取到的 IP 地址和端口号打印出来,toUtf8().data() 将 QString 转换为 char* 类型。
  • ReadIniFilesIsKey 函数:
    • QSettings setting("./MySQLfiles.ini",QSettings::IniFormat);:创建 QSettings 对象 setting 用于读取 MySQLfiles.ini 文件。
    • foreach(QString key,setting.allKeys()):使用 allKeys 方法获取文件中的所有键,并通过 foreach 循环遍历。
    • qDebug()<<key.toUtf8().data()<<":"<<setting.value(key).toString().toUtf8().data();:打印出每个键及其对应的值,都转换为 char* 类型。

 32.2 JSON文件操作

实现以下操作

首先设计ui

#include<QMessageBox>
#include<QDebug>
#include<QFile>
#include<QJsonDocument>
#include<QJsonObject>
#include<QJsonParseError>


qjsonper::qjsonper(QWidget *parent)
    : QDialog(parent)
   , ui(new Ui::qjsonper)
{
    // 初始化界面
    ui->setupUi(this);
}

qjsonper::~qjsonper()
{
    // 释放 UI 资源
    delete ui;
}


// 点击 "写入 JSON" 按钮时执行的槽函数
void qjsonper::on_pushButton_writeJson_clicked()
{
    // 创建一个 QJsonObject 用于存储 MySQL 信息
    QJsonObject mysqinfo;
    // 插入 IP 信息
    mysqinfo.insert("ip","192.168.0.125");
    // 插入端口信息
    mysqinfo.insert("port",3308);

    // 创建一个 QJsonObject 用于存储更高级别的信息
    QJsonObject jsonifo;
    // 插入状态码
    jsonifo.insert("code",1);
    // 插入消息描述
    jsonifo.insert("dbmsg","MySQL数据库配置参数");
    // 插入 MySQL 信息作为一个子对象
    jsonifo.insert("data",mysqinfo);

    // 创建一个 QJsonDocument 对象
    QJsonDocument jsondoc;
    // 将 QJsonObject 作为文档的对象
    jsondoc.setObject(jsonifo);

    // 创建一个 QFile 对象,文件名为 databasejsonfiles.json
    QFile qfiles("./databasejsonfiles.json");
    // 以只写模式打开文件
    if(qfiles.open(QIODevice::WriteOnly))
    {
        // 将 QJsonDocument 转换为 JSON 字节数组并写入文件
        qfiles.write(jsondoc.toJson());
        // 关闭文件
        qfiles.close();
    }

    // 显示写入成功的消息框
    QMessageBox::information(this,"写入成功","恭喜你,Json数据文件写入成功");
}

// 点击 "读取 JSON" 按钮时执行的槽函数
void qjsonper::on_pushButton_readJson_clicked()
{
    // 存储 JSON 数据的 QString
    QString strjson;
    // 存储消息的 QString
    QString strmsg;

    // 创建一个 QFile 对象,文件名为 databasejsonfiles.json
    QFile qfiles("./databasejsonfiles.json");
    // 以只读模式打开文件
    if(qfiles.open(QIODevice::ReadOnly))
    {
        // 读取文件的全部内容
        strjson = qfiles.readAll();
        // 关闭文件
        qfiles.close();
    }

    // 创建一个 QJsonParseError 对象用于存储解析错误信息
    QJsonParseError jsonerror;
    // 从 UTF-8 编码的字节数组解析 JSON 文档
    QJsonDocument jsondoc = QJsonDocument::fromJson(strjson.toUtf8(),&jsonerror);

    // 存储临时信息的 QString
    QString strtemp;
    // 检查解析是否成功且没有错误
    if(!jsondoc.isEmpty() && (jsonerror.error == QJsonParseError::NoError))
    {
        // 获取解析后的 QJsonObject
        QJsonObject json = jsondoc.object();
        // 获取 code 字段的值
        QJsonValue code = json.value("code");
        // 获取 data 字段的值
        QJsonValue data = json.value("data");

        // 检查 code 或 data 是否有问题
        if(code.isUndefined() || code.toDouble()!= 1 || data.isUndefined() ||!data.isObject())
        {
            // 输出错误信息
            qDebug()<<"转换 Json 数据错误,请重新检查";
            // 显示错误消息框
            QMessageBox::critical(this,"错误","转换 Json 数据错误,请重新检查");
            // 退出程序
            exit(100);
        }

        // 将 data 转换为 QJsonObject
        QJsonObject databaseinfo = data.toObject();

        // 获取 IP 地址的值
        QJsonValue dbip = databaseinfo.value("ip");
        // 获取端口的值
        QJsonValue dbport = databaseinfo.value("port");

        // 检查 IP 或端口是否有问题
        if(dbip.isUndefined() || dbport.isUndefined())
        {
            // 显示错误消息框
            QMessageBox::critical(this,"错误","接口错误,请重新检查");
            // 退出程序
            exit(100);
        }

        // 将 IP 地址转换为 QString
        QString strip = dbip.toString();
        // 将端口转换为 int
        int iport = dbport.toInt();

        // 检查 IP 地址是否为空
        if(strip.isEmpty())
        {
            // 显示错误消息框
            QMessageBox::critical(this,"错误","此数据项不能为空,请重新检查");
            // 退出程序
            exit(100);
        }
        // 构建消息
        strmsg += "【JSON 配置参数】";
        strmsg += "\n数据库 IP 地址:" + strip;
        strmsg += "\n数据库端口:" + QString::number(iport,10);
    }

    // 显示读取成功的消息框
    QMessageBox::information(this,"成功",strmsg,QMessageBox::Yes);
}
  • on_pushButton_writeJson_clicked 槽函数:
    • QJsonObject mysqinfo;:创建一个 QJsonObject 用于存储 MySQL 数据库的信息,如 ip 和 port
    • mysqinfo.insert("ip","192.168.0.125"); 和 mysqinfo.insert("port",3308);:向 mysqinfo 对象插入 ip 和 port 信息。
    • QJsonObject jsonifo;:创建一个更高级别的 QJsonObject 用于存储其他信息,包括 codedbmsg 和 data(包含 mysqinfo)。
    • QJsonDocument jsondoc; 和 jsondoc.setObject(jsonifo);:创建 QJsonDocument 并将 jsonifo 作为其对象,为写入文件做准备。
    • QFile qfiles("./databasejsonfiles.json");:创建一个文件对象,用于操作文件。
    • if(qfiles.open(QIODevice::WriteOnly)) {...}:以只写模式打开文件,如果打开成功,将 QJsonDocument 转换为 JSON 字节数组并写入文件,然后关闭文件。
    • QMessageBox::information(this,"写入成功","恭喜你,Json数据文件写入成功");:显示写入成功的消息框。
  • on_pushButton_readJson_clicked 槽函数:
    • QString strjson; 和 QString strmsg;:用于存储读取的 JSON 数据和最终的消息。
    • QFile qfiles("./databasejsonfiles.json");:创建文件对象用于读取。
    • if(qfiles.open(QIODevice::ReadOnly)) {...}:以只读模式打开文件,读取文件的全部内容,存储在 strjson 中,然后关闭文件。
    • QJsonParseError jsonerror; 和 QJsonDocument jsondoc = QJsonDocument::fromJson(strjson.toUtf8(),&jsonerror);:创建 QJsonParseError 对象存储解析错误,使用 fromJson 方法将 strjson 解析为 QJsonDocument
    • if(!jsondoc.isEmpty() && (jsonerror.error == QJsonParseError::NoError)) {...}:检查解析是否成功且没有错误。
    • QJsonObject json = jsondoc.object();:从 QJsonDocument 获取 QJsonObject
    • QJsonValue code = json.value("code"); 和 QJsonValue data = json.value("data");:从 QJsonObject 获取 code 和 data 的值。
    • 后续一系列检查:检查 code 和 data 是否有问题,将 data 转换为 QJsonObject 并获取 ip 和 port,进行类型转换,同时检查是否存在问题,若有问题显示错误消息框并退出程序。
    • strmsg += "【JSON 配置参数】"; 等:构建最终的消息,显示在消息框中。


http://www.kler.cn/a/507379.html

相关文章:

  • Matplotlib基础
  • 文件上传 分片上传
  • VD:生成a2l文件
  • 网络安全技术深度解析与实践案例
  • ESP8266 AP模式 网页配网 arduino ide
  • Linux的常用命令(三)
  • Spring boot面试题----Spring Boot核心注解有哪些
  • 大文件上传的解决办法~文件切片、秒传、限制文件并发请求。。。
  • Lambda 架构之实时处理层的深度剖析:从原理到 Java 实战
  • XML序列化和反序列化的学习
  • 50.AppendAllText C#例子
  • 成功案例分享 — 芯科科技助力涂鸦智能打造Matter over Thread模块,简化Matter设备开发
  • C#数据库操作系列---SqlSugar完结篇
  • 摄像头模块在狩猎相机中的应用
  • 【Unity-Animator】通过 StateMachineBehaviour 实现回调
  • 华为HCIE-Security考试心得
  • SpringMVC复习笔记
  • Oracle系列---【Smallfile模式的表空间如何确定单个数据文件的最大大小?】
  • 踏上 C++ 编程之旅:开篇之作
  • Observability:组装 OpenTelemetry NGINX Ingress Controller 集成
  • yt-dlp脚本下载音频可选设置代理
  • 探索 Linux:(一)介绍Linux历史与Linux环境配置
  • 鸿蒙UI开发——文本级联选择器
  • 基于Python招聘职位数据采集与数据可视化分析
  • 用 HTML5 Canvas 和 JavaScript 实现雪花飘落特效
  • 基于Matlab实现微带贴片天线仿真程序