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