引言
做项目的时候需要将一些参数设置的更加灵活,通过用户修改来控制程序中一些参数,所以写到了配置文件中方便处理。
实现
下面是配置文件生成、读取的代码。
configinfo.h
#ifndef CONFIGINFO_H
#define CONFIGINFO_H#include <QMutex>
#include <QSettings>/********************************************======功能描述:=======1.配置websocket断开重连的时间间隔,2.配置websocket发送心跳的时间间隔,3.配置websocket尝试重连的次数。
********************************************/class ConfigInfo
{
private:ConfigInfo();
public:static ConfigInfo *getInstance();//获取指向创建的配置信息的指针static int getReconnectTime();//获取断开重连的时间static int getSendHeartTime();//获取发送心跳的时间static int getReconnectCount();//获取重连的次数static QString getExcutableProgramPath();//获取可执行程序的路径
private:void writeKeyValue(QString strSection,QString strKey,QVariant value);//写键值对void writeIniFile();//写配置文件void getIniFileValue();//获取配置文件中的各值
private:static ConfigInfo *m_config;//指向配置对象的指针static QMutex m_mutex;//互斥锁static int m_reconnectTime;//断开重连的时间间隔static int m_sendHeartTime;//发送心跳的时间间隔static int m_reconnectCount;//断开重连的次数QSettings *m_setting;//指向setting对象指针
};#endif // CONFIGINFO_H
configinfo.cpp
#include "configinfo.h"
#include <QCoreApplication>
#include <QMutexLocker>
#include <QDebug>ConfigInfo *ConfigInfo::m_config = nullptr;
QMutex ConfigInfo::m_mutex;
int ConfigInfo::m_reconnectTime;
int ConfigInfo::m_sendHeartTime;
int ConfigInfo::m_reconnectCount;
ConfigInfo::ConfigInfo()
{QString strPath = getExcutableProgramPath();qDebug()<<"strPath:"<<strPath;m_setting = new QSettings(strPath,QSettings::IniFormat);writeIniFile();//配置文件已经存在要生成的内容后就可以不用再去写
}ConfigInfo *ConfigInfo::getInstance()
{if (m_config == nullptr) {static QMutexLocker locker(&m_mutex);if (m_config == nullptr) {m_config = new ConfigInfo();return m_config;}}return m_config;
}int ConfigInfo::getReconnectTime()
{return m_reconnectTime;
}int ConfigInfo::getSendHeartTime()
{return m_sendHeartTime;
}int ConfigInfo::getReconnectCount()
{return m_reconnectCount;
}QString ConfigInfo::getExcutableProgramPath()
{return QCoreApplication::applicationDirPath() + "/websocketConfig.ini";
}void ConfigInfo::writeKeyValue(QString strSection, QString strKey, QVariant value)
{m_setting->setValue(QString("%1/%2").arg(strSection).arg(strKey),value);//注意中间的/
}void ConfigInfo::writeIniFile()
{writeKeyValue("Websocket","reconnectTime",3000);writeKeyValue("Websocket","sendHeartTime",3000);writeKeyValue("Websocket","reconnectCount",5);getIniFileValue();
}void ConfigInfo::getIniFileValue()
{m_reconnectTime = m_setting->value("Websocket/reconnectTime").toInt();//获取分段下的键m_sendHeartTime = m_setting->value("Websocket/sendHeartTime").toInt();m_reconnectCount = m_setting->value("Websocket/reconnectCount").toInt();
}
mian.cpp
#include <QCoreApplication>
#include "configinfo.h"
#include <QDebug>int main(int argc,char *argv[])
{QCoreApplication a(argc,argv);qDebug()<<QStringLiteral("重连次数:")<<ConfigInfo::getInstance()->getReconnectCount();qDebug()<<QStringLiteral("重连时间间隔:")<<ConfigInfo::getInstance()->getReconnectTime();qDebug()<<QStringLiteral("发送心跳间隔:")<<ConfigInfo::getInstance()->getSendHeartTime();return a.exec();//这里写为return 0不能生成配置文件ini
}
以上就是配置文件的生成和读取,main.cpp中主要是测试了一下生成的文件中的内容能否正确读取。
心得:
对于被多个类或者整个项目共享的类,若是一个类对象可以,就将该类定义为单例模式。此外一些获取变量的值的函数可以定义为静态的,就尽量定义为静态函数,方便外部调用,而且共享该值,不用多次拷贝,