目录
一、前言
二、头文件代码
三、源文件代码
四、使用示例
五、使用效果
一、前言
在qt开发过程中,很多时候需要为软件添加配置,让软件在下一次打开时仍然保持上一次关闭时的设置。qt的配置类QSettings,本文通过继承QSettings实现自定义类,方便在代码中随时调用,另外将其设置为单例模式,在程序只需要一个配置文件时使用更方便。
二、头文件代码
config.h
#pragma once
#pragma execution_character_set("utf-8")
#include <QSettings>
#include <QColor>
#include <QVector>
#include <QTextCodec>
class config : public QSettings
{
public:
~config();
config& operator = (const config&) = delete;
static config &getInstance(void);
QSettings *configFile;
void writeConfig(const QString group, const QString key, QVariant value);
QVariant readConfig(const QString group, const QString key);
void removeKey(const QString key);
QStringList readAllKeys(const QString group); //读取指定结点下的所有键
QStringList readAllGroups(); //读取所有结点
private:
config();
static config * instance;
};
三、源文件代码
config.cpp
#include "config.h"
#include <QTextCodec>
config* config::instance = NULL;
config::config()
{
configFile = new QSettings("./config/configFile.ini",QSettings::IniFormat);
configFile->setIniCodec(QTextCodec::codecForName("UTF-8"));
//可以自行添加一些默认配置
if (configFile->value("Set/length").isNull())
configFile->setValue("Set/length", 2);
if (configFile->value("Set/width").isNull())
configFile->setValue("Set/width", 2.5);
if (configFile->value("Set/showLog").isNull())
configFile->setValue("Set/showLog", true);
if (configFile->value("Net/ip").isNull())
configFile->setValue("Net/ip", "127.0.0.1");
if (configFile->value("Net/port").isNull())
configFile->setValue("Net/port", 8888);
}
config::~config()
{
delete configFile;
}
config &config::getInstance()
{
if(instance == NULL)
instance = new config();
return *instance;
}
void config::writeConfig(const QString group, const QString key, QVariant value)
{
QString str("%1/%2");
configFile->setValue(str.arg(group,key), value);
}
QVariant config::readConfig(const QString group, const QString key)
{
QString str("%1/%2");
QVariant qvar = configFile->value(str.arg(group, key));
return qvar;
}
void config::removeKey(const QString key)
{
configFile->remove(key);
}
QStringList config::readAllKeys(const QString group)
{
QStringList result;
configFile->beginGroup(group);
result = configFile->childKeys();
configFile->endGroup();
return result;
}
QStringList config::readAllGroups()
{
return configFile->childGroups();
}
配置文件在构造函数添加了一些自定义的默认配置项,在配置文件删除时会默认添加这些配置项,修改配置不影响。
四、使用示例
#include "common/loger.h"
#include "common/config.h"
int main(int argc, char *argv[])
{
//读配置
if (config::getInstance().readConfig("Set", "showLog").toBool()) {
setLogPath("./" + LOG_FILE_NAME);
qInstallMessageHandler(customLogMessageHandler);
}
//写配置
config::getInstance().writeConfig("Set", "port", 8877);
//..........
}
五、使用效果
使用后在文件夹下生成configFile.ini配置文件。