(封装) Qt (QSettings) 读写(ini/conf)配置文件用法详解

1. ini配置文件的组成

[section]           // 节名
key = value         //键 = 值

在这里插入图片描述

2. 关于QSettings

QSettings的API是基于Qvariant,它包含了大部分通常的Qt数据类型,比如QString,QRec,QImage,等等。
当创建一个Qsettings的对象时,需要传递给它两个参数,第一个是组织的名称,第二个是应用程序的名称。
更多关于QSettings

QSettings::NativeFormat 使用平台最合适的存储格式设置。在Windows中,使用系统注册表;OS X和iOS中,使用的是CFPreferences API;在Unix中,使用的是conf格式的文本配置文件
QSettings::IniFormat 存储在INI文件中的设置。
QSettings::InvalidFormat registerFormat()返回的值

QVariant value( const QString &key) const
获取键值
void setValueconst QString &key, const QString &value)
设置键值
QStringList allKeys() const
返回所有的key,以list形式
QString applicationName() const
返回应用程序名称
QString fileName() const
返回写入注册表地址,或ini文件路径
void beginGroup(const QString &prefix)
自动添加group到指定的key
void endGroup()
恢复group为在调用beginGroup之前的group
int beginReadArray(const QString &prefix);
向当前组添加前缀并从数组开始读取。返回数组的大小。
void beginWriteArray(const QString &prefix, int size = -1);
向当前组添加前缀并开始编写大小大小的数组。如果大小为-1(默认值),则根据条目的索引自动确定。
void remove(const QString &key);
清除key及其所对应的value

3. QSettings封装

//settings.h

#pragma once
#ifndef SETTING_H
#define SETTING_H

#include <QSettings>
#include <QSharedPointer>
#include <QTextCodec>
#include <QCoreApplication>
#include <QFile>

class  IniSettings
{
public:
	QSharedPointer<QSettings> m_iniFile;

public:
	void settings_init(const QString &path); //初始化QSettings对象,并读取ini配置文件,如果不存在配置文件,则创建
	void setValue(const QString &section, const QString &key, const QString &value); //写入配置项(section:节点,key:键名,value:键值)
	void removeNode(const QString &section);                           //移除节点(包括其中所有的键值)
	void removeKey(const QString &section, const QString &key);               //移除节点中的某个键值
	QString getValue(const QString &section, const QString &key);  //读配置项
};

#endif // SETTING_H

//settings.cpp

#include "settings.h"

void IniSettings::settings_init(const QString &path)
{
	/*QString fileName;
	fileName = QCoreApplication::applicationDirPath();
	fileName += path;*/
	m_iniFile = QSharedPointer<QSettings>(new QSettings(path, QSettings::IniFormat));
	/*QFile file(path);
	if (false == file.open(QIODevice::ReadOnly | QIODevice::Text))
	{
		m_iniFile->beginGroup("section");
		m_iniFile->setValue("status", "false");
		m_iniFile->endGroup();
	}*/
}

void IniSettings::setValue(const QString &section, const QString &key, const QString &value)
{
	m_iniFile->setIniCodec(QTextCodec::codecForName("System")); //确保中文能使用
	m_iniFile->beginGroup(section);     // 设置节点名
	m_iniFile->setValue(key, value);    //设置键名和键值
	m_iniFile->endGroup();              // 结束当前节的操作
}

void IniSettings::removeNode(const QString &section)
{
	m_iniFile->setIniCodec(QTextCodec::codecForName("System")); //确保中文能使用
	m_iniFile->remove(section);
}

void IniSettings::removeKey(const QString &section, const QString &key)
{
	m_iniFile->setIniCodec(QTextCodec::codecForName("System")); //确保中文能使用
	/*QString path = QString("%1/%2").arg(section).arg(key);
	m_iniFile->remove(path);*/
	m_iniFile->beginGroup(section);
	m_iniFile->remove(key);
	m_iniFile->endGroup();
}

QString IniSettings::getValue(const QString &section, const QString &key)
{
	m_iniFile->setIniCodec(QTextCodec::codecForName("System")); //确保中文能使用
	QString path = QString("%1/%2").arg(section).arg(key);
	QString result = m_iniFile->value(path).toString();
	return result;
}

猜你喜欢

转载自blog.csdn.net/qq_36651243/article/details/96294087