Qt 之 自定义配置文件类,QSettings应用

目录

一、前言

二、头文件代码

三、源文件代码

四、使用示例

五、使用效果


一、前言

        在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配置文件。

猜你喜欢

转载自blog.csdn.net/qq_41632571/article/details/131846327
今日推荐