当前位置:   article > 正文

(封装) Qt (QSettings) 读写(ini/conf)配置文件用法详解(内含中文乱码问题分析注释与解决)_inisettings::settings_init(const qstring &path);

inisettings::settings_init(const qstring &path);

1. ini配置文件的组成

[section]           // 节名
key = value         //键 = 值
  • 1
  • 2

在这里插入图片描述

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, const QString &defaultValue);  //读配置项
	QStringList getValueList(const QString &section, const QString &key, QString defaultValue = ""); //批量读取
};

#endif // SETTING_H
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

//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));
	//确保中文能使用
	//注意此处使用的编码取决于ini文件的编码格式,例如ini使用的是UTF-8则使用UTF-8
	m_iniFile->setIniCodec(QTextCodec::codecForName("UTF-8"));
	/*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->beginGroup(section);     // 设置节点名
	m_iniFile->setValue(key, value);    //设置键名和键值
	m_iniFile->endGroup();              // 结束当前节的操作
}

void IniSettings::removeNode(const QString &section)
{
	m_iniFile->remove(section);
}

void IniSettings::removeKey(const QString &section, const QString &key)
{
	/*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, const QString &defaultValue)
{
	QString path = QString("%1/%2").arg(section).arg(key);
	QString result = m_iniFile->value(path, defaultValue).toString();
	return result;
}

QStringList IniSettings::getValueList(const QString & section, const QString & key, QString defaultValue)
{
	QVariant variant = m_iniFile->value(QString("%1/").arg(section) + key);
	QStringList list = variant.value<QStringList>();
	return list;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/300306
推荐阅读
相关标签
  

闽ICP备14008679号