1. 保存分组数据到配置文件
#include <QSettings>void saveNetworkConfig() {QSettings settings("network.ini", QSettings::IniFormat);// 网络配置分组settings.beginGroup("Network");// 源地址配置settings.beginGroup("Source");settings.setValue("IP", "192.168.1.100");settings.setValue("Port", 5000);settings.endGroup(); // 结束 Source 分组// 目标地址配置settings.beginGroup("Destination");settings.setValue("IP", "10.10.2.200");settings.setValue("Port", 8080);settings.endGroup(); // 结束 Destination 分组settings.endGroup(); // 结束 Network 分组settings.sync(); // 立即写入文件
}
生成的 network.ini
文件内容:
[Network/Source]
IP=192.168.1.100
Port=5000[Network/Destination]
IP=10.10.2.200
Port=8080
2. 从配置文件加载分组数据
#include <QSettings>
#include <QDebug>void loadNetworkConfig() {QSettings settings("network.ini", QSettings::IniFormat);// 加载源地址配置settings.beginGroup("Network/Source");QString srcIP = settings.value("IP", "127.0.0.1").toString();int srcPort = settings.value("Port", 8000).toInt();settings.endGroup();// 加载目标地址配置settings.beginGroup("Network/Destination");QString dstIP = settings.value("IP", "0.0.0.0").toString();int dstPort = settings.value("Port", 80).toInt();settings.endGroup();// 打印结果qDebug() << "源地址:" << srcIP << ":" << srcPort;qDebug() << "目标地址:" << dstIP << ":" << dstPort;
}
输出结果:
源地址: "192.168.1.100" : 5000
目标地址: "10.10.2.200" : 8080
3. 分组操作关键点
操作 | 代码示例 | 说明 |
---|---|---|
开始分组 | beginGroup("Network") | 进入层级配置 |
嵌套分组 | beginGroup("Source") | 可多层嵌套 |
结束分组 | endGroup() | 必须与beginGroup 成对出现 |
组合路径 | beginGroup("Network/Source") | 直接访问深层分组 |
默认值处理 | value("Port", 80) | 当键不存在时返回默认值 |
4. 完整使用示例
#include <QCoreApplication>
#include <QSettings>
#include <QDebug>int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);// 保存配置saveNetworkConfig();// 加载配置loadNetworkConfig();return 0;
}
5. 扩展:动态分组管理
如果需要处理多个动态网络配置(如保存多个服务器配置):
// 保存多个服务器配置
void saveServers() {QSettings settings("servers.ini", QSettings::IniFormat);QStringList servers = {"ServerA", "ServerB", "ServerC"};foreach (const QString &name, servers) {settings.beginGroup(name); // 动态生成分组名settings.setValue("IP", name + ".example.com");settings.setValue("Port", 8080);settings.endGroup();}
}// 加载所有服务器
void loadServers() {QSettings settings("servers.ini", QSettings::IniFormat);foreach (const QString &group : settings.childGroups()) {settings.beginGroup(group);qDebug() << "服务器" << group << "=> IP:" << settings.value("IP").toString()<< "Port:" << settings.value("Port").toInt();settings.endGroup();}
}
生成的 servers.ini
:
[ServerA]
IP=ServerA.example.com
Port=8080[ServerB]
IP=ServerB.example.com
Port=8080[ServerC]
IP=ServerC.example.com
Port=8080
通过这种分组方式可以:
-
避免键名冲突(如不同分组的
Port
) -
提高配置文件可读性
-
方便批量管理同类配置项