【Qt QML】QSettings读写ini配置文件类

发布时间:2024年01月21日

QSettings 是 Qt 框架中用于读取和写入应用程序配置信息的类。它提供了一个跨平台的解决方案,可轻松地保存和获取应用程序的设置和状态。

QSettings 通常用于保存应用程序的配置信息,如窗口大小、位置、字体设置等。这些信息通常存储在注册表、属性列表文件或 INI 文件中,具体取决于操作系统。在 Windows 系统中,QSettings 通常将数据存储在注册表中;在 Unix 系统中,如果没有标准配置文件,许多应用程序(包括 KDE 应用程序)使用 INI 文本文件。

QSettings API 基于 QVariant,可以保存很多基础类型,如 QString、QRect、QImage 等。每个设置包括一个指定设置名称(键)的字符串和一个与该键关联的 QVariant 存储数据。可以使用 setValue() 方法设置一个设置的值,这些变化可能不会立即保存到永久存储中,但可以随时调用 sync() 方法提交更改。

标题下面封装一个可以QSettings读写ini文件的类:

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

文章来源:https://blog.csdn.net/wangyi463295828/article/details/135628269
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。