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

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

源客V

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值