Qt 对 ini文件、json、xml 进行操作

一、INI 文件操作

1、概述

1、基本介绍

  • INI 文件是 Initialization File 的缩写,即初始化文件,通常存放的是一个程序的初始化信息,是 Windows 的系统配置文件所采用的存储格式,统管 windows 的各项配置

  • ini 文件的后缀名不一定是.ini ,也可以是.cfg 、.conf 或者是.tx* 。

  • INI 文件由多个节(section)组成,每个节都有多个键值对(key-value pair)。键值对:由一个键(key)和一个值(value)组成,中间使用等号(=)连接。

2、INI 文件的结构很简单,它通常由以下几个部分组成:

  • 节名称:以方括号 ([ ]) 括起来的字符串,用于标识一个节。
  • 键名称:一个字符串,用于标识一个键。
  • 键值:一个字符串,表示键对应的值。

3、在 INI 文件中,可以使用分号(;)或者井号(#)来添加注释,这些符号后面的内容将被解析器忽略,不被视为配置项或者值。

; This is a comment in INI file
# This is another comment

[Section1]
setting1 = value1 ; This is a comment for setting1
setting2 = value2 # This is another comment for setting2

在上面的示例中,“This is a comment in INI file”和“This is another comment”是两个注释,它们都不会被解析器读取。在 [Section1] 下面的 setting1 和 setting2 配置项后面也添加了注释,这些注释会被解析器忽略。

4、以下是一个简单的 INI 文件示例:

  • 这个 INI 文件包含两个节,一个是 database,另一个是 logging。
  • 在 database 节中,有 5 个键值对,分别是 host、port、username、password 和 database。
  • 在 logging 节中,有 2 个键值对,分别是 level 和 file。
[database]
host = localhost
port = 3306
username = myuser
password = mypass
database = mydb

[logging]
level = info
file = log.txt

INI 文件通常用于存储应用程序或操作系统的配置信息,例如数据库连接配置、日志记录配置等。由于 INI 文件的结构简单,易于阅读和编辑,因此被广泛应用。


2、Qt 如何读取 INI 文件

在 Qt 中,可以使用 QSettings 类来读取和写入 INI 文件。

以下是一个简单的示例代码,展示了如何读取 INI 文件中的值:

#include <QCoreApplication>
#include <QSettings>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QSettings settings("config.ini", QSettings::IniFormat);

    QString value = settings.value("section1/key1", "default value").toString();
    qDebug() << "Value: " << value;

    return a.exec();
}
  • 在这个例子中,首先创建了一个 QSettings 对象,并指定了要读取的 INI 文件的路径和格式。
  • 然后通过 value 方法,读取 INI 文件中 section1 节点下的 key1 键的值。
  • 如果该键不存在,则返回默认值 “default value”。最后将读取到的值输出到控制台。

3、group 相关 API 介绍

QSettings 类中的 beginGroup、endGroup 和 group 函数用于处理设置中的分组信息,具体如下:

  • beginGroup(group: str) 函数:表示开始一个分组,它接受一个字符串类型的参数 group,表示分组的名字,分组的名称可以使用类似路径的方式来组织,例如:“UI/Font”。在一个分组内设置的键值对都会存储在这个分组内。
  • endGroup() 函数:表示结束当前的分组,一般在调用 beginGroup() 函数之后会调用此函数
  • group(group: str) 函数:表示返回一个 QSettings 对象,该对象是在指定的 group 下打开的,可以用它来读取或修改指定分组下的键值对信息。

通过使用 beginGroup() 和 endGroup() 函数,可以将键值对按照分组的方式来组织,便于管理和维护,同时也方便了程序的开发和维护。

以下是一个简单的使用例子:
假设有一个名为 “settings.ini” 的 INI 配置文件,内容如下:

[General]
username=John Doe
language=en_US

[Network]
port=8080

我们可以使用 QSettings 类来读取和写入 INI 文件中的值。下面是一个例子,演示了如何使用 beginGroup、endGroup 和 group 来读取和写入值:

#include <QtCore/QCoreApplication>
#include <QtCore/QSettings>
#include <QtCore/QString>
#include <QtCore/QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);

    // 读取 INI 文件中的值
    QSettings settings("settings.ini", QSettings::IniFormat);
    QString username = settings.value("General/username").toString();
    QString language = settings.value("General/language").toString();
    int port = settings.value("Network/port").toInt();

    // 打印读取到的值
    qDebug() << "username:" << username;
    qDebug() << "language:" << language;
    qDebug() << "port:" << port;

    // 写入 INI 文件中的值
    settings.beginGroup("General");
    settings.setValue("username", "Alice");
    settings.setValue("language", "zh_CN");
    settings.endGroup();

    settings.beginGroup("Network");
    settings.setValue("port", 80);
    settings.endGroup();

    // 读取已修改的值
    username = settings.value("General/username").toString();
    language = settings.value("General/language").toString();
    port = settings.value("Network/port").toInt();

    // 打印已修改的值
    qDebug() << "modified username:" << username;
    qDebug() << "modified language:" << language;
    qDebug() << "modified port:" << port;

    return app.exec();
}

在上面的例子中,我们使用 beginGroup 和 endGroup 来设置组,从而将值组织在一起。例如,我们在读取和写入 General 组的值时,使用 beginGroup(“General”) 和 endGroup() 来标识 General 组的起始和结束位置。这样可以让代码更加清晰易懂,也更加易于维护。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
首先,我们需要使用QSettings类来读取ini文件中的内容。QSettings类提供了一个方便的接口来访问系统注册表、ini文件和其他平台相关位置的设置。 然后,我们可以使用QRegularExpression类将正则表达式字符串转换为QRegularExpression对象,并使用toJson()函数将其转换为JSON格式的字符串。 下面是一个示例代码,可以将ini文件中的正则表达式转换为JSON格式: ```cpp #include <QCoreApplication> #include <QDebug> #include <QSettings> #include <QRegularExpression> #include <QJsonObject> #include <QJsonDocument> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QSettings settings("config.ini", QSettings::IniFormat); QString regExpString = settings.value("RegExp").toString(); QRegularExpression regExp(regExpString); QJsonObject jsonObj; jsonObj["pattern"] = regExp.pattern(); jsonObj["caseSensitivity"] = regExp.caseSensitivity(); jsonObj["minimal"] = regExp.isMinimal(); QJsonDocument jsonDoc(jsonObj); QString jsonString = QString::fromUtf8(jsonDoc.toJson()); qDebug() << "JSON string:" << jsonString; return a.exec(); } ``` 在上面的代码中,我们首先使用QSettings类读取名为“RegExp”的键的值,该键包含正则表达式字符串。然后,我们使用QRegularExpression类将字符串转换为QRegularExpression对象,并将其转换为JSON格式的QJsonObject对象。最后,我们将QJsonObject对象转换为JSON格式的字符串,并将其打印到控制台上。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想文艺一点的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值