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

相关推荐
star _chen8 分钟前
C++ std::move()详解:从小白到高手
开发语言·c++
lzhdim12 分钟前
C#开发者必知的100个黑科技(前50)!从主构造函数到源生成器全面掌握
开发语言·科技·c#
福尔摩斯张12 分钟前
C++核心特性精讲:从C语言痛点出发,掌握现代C++编程精髓(超详细)
java·linux·c语言·数据结构·c++·驱动开发·算法
刺客xs21 分钟前
Qt----事件简述
开发语言·qt
27399202924 分钟前
QButtonGroup (Qt)
qt
程序员-King.24 分钟前
【Qt开源项目】— ModbusScope-进度规划
开发语言·qt
syt_101333 分钟前
Object.defineProperty和Proxy实现拦截的区别
开发语言·前端·javascript
liu****33 分钟前
Python 基础语法(二):程序流程控制
开发语言·python·python基础
charlie11451419134 分钟前
如何快速在 VS2026 上使用 C++ 模块 — 完整上手指南
开发语言·c++·笔记·学习·现代c++
时空无限37 分钟前
Java Buildpack Reference
java·开发语言