学习QSettings类,解析INI配置文件

01 QSettings介绍
QSettings是用于读取和写入应用程序配置信息的一个类。QSettings提供了一种简单的方式来访问和修改应用程序的配置信息,例如窗口位置、用户首选项等。

QSettings支持多种格式的设置文件,包括INI格式、注册表(Windows)、plist(macOS)等。

02 INI文件格式介绍
INI文件格式是一种非正式的标准,用于存储软件配置信息。它以节(section)和键(key)构成,常用于微软Windows操作系统中。这种配置文件的文件扩展名多为(ini)。INI是英文“初始化”(initialization)的缩写,INI文件被用来对操作系统或特定程序进行初始化或进行参数设置。

节(section) :节用方括号括起来,单独占一行,例如: [section]。

键(key) :键(key)又名属性(property),单独占一行用等号连接键名和键值,例如: name=value。

注释(comment): 注释使用英文分号(;)开头,单独占一行。在分号后面的文字,直到该行结尾都全部为注释。

INI文件格式例子:
以下是一段INI配置文件示例,配置了(system)和(mysql)二组配置数据,分别如下:

system组有三个配置项,分别是:(server_ip=100.10.1.120)、(server_port=8098)和(database_type=mysql)。

mysql组有三个配置项,分别是:(db_server=100.10.1.120:3306)、(db_name=erp)、(db_account=root)和(db_password=admin)。

; config.ini file
 
; 系统配置信息
[system]
server_ip=100.10.1.120
server_port=8098
database_type=mysql
 
; 系统库连接信息
[mysql]
db_server=100.10.1.120:3306
db_name=erp
db_account=root
db_password=admin
03 定义QSettings对象
#include <QSettings>
 
// 定义QSettings对象,加载(config.ini)文件
QSettings settings("./config.ini", QSettings::IniFormat);
 
// 判断状态
QSettings::Status status = settings.status();
if (QSettings::NoError == status) {
    // ...
}
04 获取指定键值
#include <QSettings>
 
// 定义QSettings对象,加载(config.ini)文件
QSettings settings("./config.ini", QSettings::IniFormat);
 
// 获取指定键值示例
QString serverIp = settings.value("system/server_ip", "").toString();
int serverPort = settings.value("system/server_port", 0).toInt();
qDebug() << "server_ip = " << serverIp;        // 输出 "100.10.1.120"
qDebug() << "server_port = " << serverPort;    // 输出 8098
05 遍历指定分组所有键值
示例代码,遍历"system"配置分组下所有配置键值。

#include <QSettings>
 
// 定义QSettings对象,加载(config.ini)文件
QSettings settings("./config.ini", QSettings::IniFormat);
 
// 开始读取"system"分组
settings.beginReadArray("system");
// 获取"system"分组所有子键
auto childKeys = settings.childKeys();
// 遍历键值
for (const auto& key: childKeys) {
    QVariant value = settings.value(key);
    // 分别输出以下(按照key字符排序,不是按照ini配置文件排序)
    // "database_type"  =  "mysql"
    // "server_ip"  =  "100.10.1.120"
    // "server_port"  =  "8098"
    qDebug() << key << " = " << value.toString();
}
// 结束分组
settings.endArray();
06 遍历所有键值
示例代码,遍历整个INI配置文件下所有配置键值。

#include <QSettings>
 
// 定义QSettings对象,加载(config.ini)文件
QSettings settings("./config.ini", QSettings::IniFormat);
 
// 获取所有键
auto allKeys = settings.allKeys();
// 遍历键值
for (const auto& key: allKeys) {
    QVariant value = settings.value(key);
    // 分别输出以下(按照key字符排序,不是按照ini配置文件排序)
    // "mysql/db_account"  =  "root"
    // "mysql/db_name"  =  "erp"
    // ...
    qDebug() << key << " = " << value.toString();
}
07 注意事项
如果遇到中文乱码问题,记得检查ini文件是否是utf-8编码。

如果加载不到配置数据,记得检查ini文件的路径是否正确;最好是通过全路径访问的方式,如(C:/xxx/config.ini),或者通过QApplication::applicationDirPath()+"/config.ini"之类的方式来访问ini文件。

// 以下(config.ini)文件跟你的exe程序在同一个目录。
QString qstr_file_path = QApplication::applicationDirPath()+"/config.ini";
QSettings settings(qstr_file_path, QSettings::IniFormat);
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/yanghz/article/details/135922196

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值