Qt应用必备模块之软件全局配置(单例模式)实现

1 概述

在大大小小的企业软件中,少不了配置单元,程序启动初始化需要加载配置,用户设置及操作需要保存配置。Qt中可以使用QSetting很方便的实现,并且可以生成.ini配置文件。为降低程序耦合性,这里采用单例模式来实现全局配置。废话不多说,直接上代码。

2 实现

使用时只需将头文件和源文件加入工程,在要用到配置的地方使用appSettingsInstance。

先看配置文件示例databae.ini

[Database]
path=./database
file=system.db
name=evaluatecenter
user=root
passwd=123456

configdef.h可以这样

#ifndef CONFIGDEF_H
#define CONFIGDEF_H

#include <QSettings>

// 配置文件
#define CONFIG_FILE_NAME QString("./config/database.ini")

// Database
#define DATABASE_PATH QString("Database/path")  //数据库存放路径,./为运行程序所在目录
#define DATABASE_FILE QString("Database/file")  //SQLITE数据库文件
#define DATABASE_NAME QString("Database/name")  //数据库名
#define DATABASE_USER QString("Database/user")  //用户名
#define DATABASE_PASSWD QString("Database/passwd")  //密码

#endif // CONFIGDEF_H

2.1 appsettings.h

#ifndef APPSETTINGS_H
#define APPSETTINGS_H

#include "configdef.h"

#define appSettingsInstance AppSettings::getInstance()

class AppSettings
{
public:
    static AppSettings* getInstance()
    {
        if(appSettings == nullptr)
        {
            appSettings = new AppSettings();
            settings = new QSettings(CONFIG_FILE_NAME,QSettings::IniFormat);
        }

        return appSettings;
    }

    static QVariant getSetting(QString key)
    {
        return settings->value(key);
    }

    static void setSetting(QString key, QVariant value)
    {
        return settings->setValue(key,value);
    }

    static void quit();
private:
    AppSettings();//禁止构造函数
    AppSettings(const AppSettings&){}//禁止拷贝构造函数
    AppSettings & operator=(const AppSettings &){}//禁止赋值拷贝构造函数

private:
    static AppSettings *appSettings;
    static QSettings *settings;
};

#endif // APPSETTINGS_H

2.2 appsettings.cpp

这里放在cpp文件里进行初始化是为了防止重复包含头文件导致多重定义错误编译不通过。

#include "appsettings.h"


AppSettings *AppSettings::appSettings = nullptr;
QSettings *AppSettings::settings = nullptr;

void AppSettings::quit()
{
    qInfo("[OK] AppSettings quit.");
}

AppSettings::AppSettings()
{

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值