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

目录

一、前言

二、头文件代码

三、源文件代码

四、使用示例

五、使用效果


一、前言

在qt开发过程中,很多时候需要为软件添加配置,让软件在下一次打开时仍然保持上一次关闭时的设置。qt的配置类QSettings,本文通过继承QSettings实现自定义类,方便在代码中随时调用,另外将其设置为单例模式,在程序只需要一个配置文件时使用更方便。

二、头文件代码

config.h

cpp 复制代码
#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

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();
}

配置文件在构造函数添加了一些自定义的默认配置项,在配置文件删除时会默认添加这些配置项,修改配置不影响。

四、使用示例

cpp 复制代码
#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配置文件。

相关推荐
肆忆_20 小时前
# 用 5 个问题学懂 C++ 虚函数(入门级)
c++
不想写代码的星星1 天前
虚函数表:C++ 多态背后的那个男人
c++
端平入洛3 天前
delete又未完全delete
c++
端平入洛4 天前
auto有时不auto
c++
郑州光合科技余经理5 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
feifeigo1235 天前
matlab画图工具
开发语言·matlab
dustcell.5 天前
haproxy七层代理
java·开发语言·前端
norlan_jame5 天前
C-PHY与D-PHY差异
c语言·开发语言
哇哈哈20215 天前
信号量和信号
linux·c++
多恩Stone5 天前
【C++入门扫盲1】C++ 与 Python:类型、编译器/解释器与 CPU 的关系
开发语言·c++·人工智能·python·算法·3d·aigc