深入Qt–ini文件读写
INI文件是Initialization File的缩写,即初始化文件,主要用来保存程序经常用到的一些配置参数。在Qt中可以使用QSetting类来实现ini文件的读取和写入。
1.ini文件格式
ini文件主要有节(section)、键(key)、键值(value)部分组成。
节 (section) 用方括号括起来,单独占一行,例如:
[section]
键(key)又名属性(property),单独占一行用等号连接键名和键值,例如:
name=value
2.对Qt QSetting类进行封装
2.1 头文件:iniutils.h
#ifndef INIUTILS_H
#define INIUTILS_H
#include <QObject>
/**
* @brief IniUtils
* 不支持中文
*/
namespace IniUtils {
/**
* @brief writeConfig 写单个数据
* @param file
* @param group
* @param key
* @param val
* @return
*/
int writeConfig(QString file, QString group,QString key, QString val);
/**
* @brief readConfig 读单个数据
* @param file
* @param group
* @param key
* @param val
* @return
*/
QString readConfig(QString file, QString group,QString key);
/**
* @brief writeArrayConfig 写数组数据
* @param file
* @param group
* @param key
* @param val
* @return
*/
int writeArrayConfig(QString file, QString group, QString key, QList<QString> val);
/**
* @brief readArrayConfig 读数组数据
* @param file
* @param group
* @param key
* @return
*/
QList<QString> readArrayConfig(QString file, QString group, QString key);
}
#endif // CONFIGINFO_H
2.2源文件iniutils.cpp
#include <QSettings>
#include <QFile>
#include <QTextCodec>
#include "iniutils.h"
int IniUtils::writeConfig( QString file, QString group, QString key, QString val)
{
if(file.isEmpty() || file.isNull())
{
return -1;
}
QSettings* mset = new QSettings(file, QSettings::IniFormat);
mset->setIniCodec(QTextCodec::codecForName("UTF-8"));
mset->beginGroup(group);
mset->setValue(key, val);
mset->endGroup();
return 0;
}
QString IniUtils::readConfig(QString file, QString group, QString key)
{
if(file.isEmpty() || file.isNull())
{
return "";
}
QSettings* mset = new QSettings(file, QSettings::IniFormat);
mset->setIniCodec(QTextCodec::codecForName("UTF-8"));
QString mdir = "";
mset->beginGroup(group);
mdir = mset->value(key, "").toString();
mset->endGroup();
return mdir;
}
/**
* @brief writeArrayConfig 写数组数据
* @param file
* @param group
* @param key
* @param val
* @return
*/
int IniUtils::writeArrayConfig(QString file, QString group, QString key, QList<QString> val)
{
if(file.isEmpty() || file.isNull())
{
return -1;
}
QSettings* mset = new QSettings(file, QSettings::IniFormat);
mset->setIniCodec("UTF-8");
mset->beginGroup(group);
mset->beginWriteArray("array");
for(int i = 0; i < val.size(); i++)
{
mset->setArrayIndex(i);
mset->setValue(key, val.at(i));
}
mset->endArray();
mset->endGroup();
return 0;
}
/**
* @brief readArrayConfig 读数组数据
* @param file
* @param group
* @param key
* @return
*/
QList<QString> IniUtils::readArrayConfig(QString file, QString group, QString key)
{
QList<QString> mdir;
mdir.clear();
if(file.isEmpty() || file.isNull())
{
return mdir;
}
QSettings* mset = new QSettings(file, QSettings::IniFormat);
mset->setIniCodec("UTF-8");
mset->beginGroup(group);
int size = 0;
size = mset->beginReadArray("array");
for(int i = 0; i < size; i ++)
{
mset->setArrayIndex(i);
mdir.append(mset->value(key, "").toString());
}
mset->endArray();
mset->endGroup();
return mdir;
}