QSettings 是 Qt 框架中用于读取和写入应用程序配置信息的类。它提供了一个跨平台的解决方案,可轻松地保存和获取应用程序的设置和状态。
QSettings 通常用于保存应用程序的配置信息,如窗口大小、位置、字体设置等。这些信息通常存储在注册表、属性列表文件或 INI 文件中,具体取决于操作系统。在 Windows 系统中,QSettings 通常将数据存储在注册表中;在 Unix 系统中,如果没有标准配置文件,许多应用程序(包括 KDE 应用程序)使用 INI 文本文件。
QSettings API 基于 QVariant,可以保存很多基础类型,如 QString、QRect、QImage 等。每个设置包括一个指定设置名称(键)的字符串和一个与该键关联的 QVariant 存储数据。可以使用 setValue() 方法设置一个设置的值,这些变化可能不会立即保存到永久存储中,但可以随时调用 sync() 方法提交更改。
appcfg.h
#ifndef APPCFG_H
#define APPCFG_H
#include <QObject>
#include <QSettings>
//配置信息
struct tagAppcfg
{
double fps{0.0d};
int vs_min{0};
int vs_max{0};
int region_x{0};
int region_y{0};
int region_w{0};
int region_h{0};
int canvasNum{0};
int canvasType{0};
int vsType{0};
};
class AppCfg : public QObject
{
Q_OBJECT
public:
static AppCfg* getInstance();
const tagAppcfg& getCfg();
private:
explicit AppCfg(Q
appcfg.cpp
#include "appcfg.h"
#include <QApplication>
#include <QFile>
AppCfg::AppCfg(QObject *parent)
: QObject{parent}
{
memset(&m_cfg, 0, sizeof(m_cfg));
QString iniFilePath = QApplication::applicationDirPath()+QString("/screenosd.ini");
if(!QFile(iniFilePath).exists())
{
//文件不存在,则创建并写入初始值
QSettings settings(iniFilePath, QSettings::IniFormat);
settings.setValue("VS/fps", 60.0);
settings.setValue("VS/vs_min", 2);
settings.setValue("VS/vs_max", 5);
settings.setValue("VS/vsType", 0);
settings.setValue("Region/x", 0);
settings.setValue("Region/y", 0);
settings.setValue("Region/width", 1920);
settings.setValue("Region/heigh", 1080);
settings.setValue("Region/canvasNum", 2);
settings.setValue("Region/canvasType", 0);
}
//文件存在,则读取配置信息
QSettings settings(iniFilePath, QSettings::IniFormat);
m_cfg.fps = settings.value("VS/fps").toDouble();
m_cfg.vs_min = settings.value("VS/vs_min").toInt();
m_cfg.vs_max = settings.value("VS/vs_max").toInt();
m_cfg.region_x = settings.value("Region/x").toInt();
m_cfg.region_y = settings.value("Region/y").toInt();
m_cfg.region_w = settings.value("Region/width").toInt();
m_cfg.region_h = settings.value("Region/heigh").toInt();
m_cfg.canvasNum = settings.value("Region/canvasNum").toInt();
m_cfg.canvasType= settings.value("Region/canvasType").toInt();
}
AppCfg *AppCfg::getInstance()
{
static AppCfg sAppCfg;
return &sAppCfg;
}
const tagAppcfg &AppCfg::getCfg()
{
return m_cfg;
}