参考链接:
ini配置文件格式
通过QSettings增删改查.ini文件内容
需求
在应用软件初始化过程中加载一些配置文件已灵活配置初始化选项,避免用户反复配置相同内容。
思路
使用QSetting来实现ini文件的读写,也可以通过写xml文件的形式实现,参照C++|读写xml文件开源库tingxml2的使用,简单配置的话ini就足够了,如果需要一些复杂配置推荐xml及数据库配置。
实现
简单示例1
- 判断文件是否存在
- 使用QSettings类读写ini文件
#include <QtWidgets/QApplication>
#include <QWidget>
#include <QSettings>
#include <QString>
#include <QFileDialog>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// 判断文件是否存在
QString fullFilename = QCoreApplication::applicationDirPath() + "/configuration.ini";
QFileInfo fileInfo(fullFilename);
if (!fileInfo.isFile())
{
return false;
}
// Qt中使用QSettings类读写ini文件
// QSettings构造函数的第一个参数是ini文件的路径,第二个参数表示针对ini文件,第三个参数可以缺省
// QCoreApplication::applicationDirPath()为获取当前可执行程序目录
QSettings *configIniWrite = new QSettings(fullFilename, QSettings::IniFormat);
// 向ini文件中写入内容,setValue函数的两个参数是键值对
// 向ini文件的第一个节写入内容,ip节下的第一个参数
configIniWrite->setValue("/ip/first", "192.168.0.1");
// 向ini文件的第一个节写入内容,ip节下的第二个参数
configIniWrite->setValue("ip/second", "127.0.0.1");
// 向ini文件的第二个节写入内容,port节下的第一个参数
configIniWrite->setValue("port/open", "2222");
// 读取内容
QString first_ip = configIniWrite->value("ip/first").toString();
QString second_ip = configIniWrite->value("ip/second").toString();
QString port_open = configIniWrite->value("port/open").toString();
//写入完成后删除指针
delete configIniWrite;
return a.exec();
}
简单示例2
#include <QCoreApplication>
#include <QSettings>
#include <QDebug>
void saveConfig(const QString &fileName, const QString &key, const QString &value) {
// 获取程序的当前工作目录
QString currentPath = QCoreApplication::applicationDirPath();
QString configFilePath = QDir(currentPath).filePath(fileName);
// 使用QSettings来写入配置信息
QSettings settings(configFilePath, QSettings::IniFormat);
settings.setValue(key, value);
qDebug() << "Configuration saved: Key" << key << "Value" << value;
}
void loadConfig(const QString &fileName, const QString &key) {
// 获取程序的当前工作目录
QString currentPath = QCoreApplication::applicationDirPath();
QString configFilePath = QDir(currentPath).filePath(fileName);
// 使用QSettings来读取配置信息
QSettings settings(configFilePath, QSettings::IniFormat);
QString value = settings.value(key).toString();
qDebug() << "Configuration loaded: Key" << key << "Value" << value;
}
int main(int argc, char *argv[]) {
QCoreApplication app(argc, argv);
// 要操作的配置文件名
QString configFile = "loadConfig.ini";
// 保存配置信息
saveConfig(configFile, "Settings/LastOpenedFile", "example.txt");
// 加载配置信息
loadConfig(configFile, "Settings/LastOpenedFile");
return app.exec();
}
遍历所有键 同时删除键值内的组名
#include <QCoreApplication>
#include <QSettings>
#include <QDebug>
void printAllKeys(const QString &fileName, const QString &group = QString()) {
QString currentPath = QCoreApplication::applicationDirPath();
QString configFilePath = QDir(currentPath).filePath(fileName);
QSettings settings(configFilePath, QSettings::IniFormat);
// 选择组(如果提供了组名)
if (!group.isEmpty()) {
settings.beginGroup(group);
}
// 遍历所有的键
QStringList allKeys = settings.allKeys();
for (const QString &key : allKeys) {
// 删除组名
QString str;
int firstSlashIndex = key.indexOf('/'); // 找到第一个'/'的位置
if (firstSlashIndex != -1) {
str = key.mid(firstSlashIndex + 1);
}
qDebug() << "Key:" << key << "Value:" << settings.value(key).toString();
}
// 遍历所有的子组
QStringList allGroups = settings.childGroups();
for (const QString &subGroup : allGroups) {
qDebug() << "Group:" << subGroup;
printAllKeys(fileName, subGroup); // 递归调用以遍历子组
}
// 如果选择了组,则结束组
if (!group.isEmpty()) {
settings.endGroup();
}
}
int main(int argc, char *argv[]) {
QCoreApplication app(argc, argv);
QString configFile = "loadConfig.ini";
printAllKeys(configFile);
return app.exec();
}
根据key删除某项内容或清空ini文件
QString defaultPath = QCoreApplication::applicationDirPath(); // 获取应用程序的路径
QString fullFilename = defaultPath + "/loadConfig.ini";
if (!IsExistsLoadDLLIni(fullFilename))
return;
// 使用QSettings来读取配置信息
QSettings settings(fullFilename, QSettings::IniFormat);
// 清空 ini 文件
//settings.clear();
// 节点名称
settings.beginGroup("loadedDLL");
settings.remove(_dll_name); // 通过参数传进来的key值
settings.sync(); // 确保更改被写入文件
settings.endGroup();
ini简介
.ini 文件是Initialization File的缩写,即初始化文件,是windows的系统配置文件所采用的存储格式,统管windows的各项配置。
INI文件由节、键、值组成。ini配置文件的后缀名也不一定必须是“.ini”,有时候也可以是“.cfg”、“.conf”或者是“.txt”等等。
【参数】(键=值):
INI所包含的最基本的“元素”就是参数(parameter),每个参数都有一个name和一个value,name和value由等号“=”隔开,name在等号的左边。如:
name=value
【节】:
所有的参数都是以节(section)为单位结合在一起的。所有的section名称都是独占一行,并且section名字都被方括号包围着([和])。在section声明后的所有parameters都属于该section。一个section没有明显的结束标识符,一个section的开始就是上一个section的结束,或者是文件结束。如:
[section]
【注解】:
注解(comments)使用分号表示(;),在分号后面的文字,直到该行结尾都全部为注释。
;comment textINI文件的数据格式的例子(配置文件的内容)