zoukankan      html  css  js  c++  java
  • Qt读写Json格式配置文件

     头文件Config.h

    #pragma once
    
    #include <QVariantMap>
    
    class Config
    {
    public:
        Config(const QString &fileName);
        ~Config();
    
        bool open(const QString &fileName);
        void sync();
    
        void write(const QString &key, const QVariant& value);
    
        QString readString(const QString &key, const QString &default = "");
        bool readBool(const QString &key, bool default = false);
        int readInt(const QString &key, int default = 0);
    
    private:
        QString m_fileName;
    
        QVariantMap m_cache;
    };

    源文件Config.cpp

    #include "Config.h"
    
    #include <QFile>
    #include <QJsonDocument>
    #include <QJsonObject>
    
    
    Config::Config(const QString &fileName)
        : m_fileName(fileName)
    {
        open(fileName);
    }
    
    Config::~Config()
    {
        sync();
    }
    
    bool Config::open(const QString &fileName)
    {
        QFile file(fileName);
        if (!file.open(QIODevice::ReadOnly))
        {
            return false;
        }
        QByteArray allData = file.readAll();
        file.close();
    
        QJsonParseError jsonError;
        QJsonDocument jsonDoc = QJsonDocument::fromJson(allData, &jsonError);
        if (jsonError.error != QJsonParseError::NoError)
        {
            return false;
        }
    
        QJsonObject root = jsonDoc.object();
        m_cache = root.toVariantMap();
    
        return true;
    }
    
    void Config::sync()
    {
        QJsonObject root = QJsonObject::fromVariantMap(m_cache);
        QJsonDocument jsonDoc(root);
        QByteArray data = jsonDoc.toJson(QJsonDocument::Compact);
        QFile file(m_fileName);
        if (file.open(QIODevice::WriteOnly))
        {
            file.write(data);
            file.close();
        }
    }
    
    void Config::write(const QString &key, const QVariant &value)
    {
        m_cache.insert(key, value);
    }
    
    QString Config::readString(const QString &key, const QString &default)
    {
        if (m_cache.contains(key))
        {
            return m_cache.value(key).toString();
        }
    
        return default;
    }
    
    bool Config::readBool(const QString &key, bool default)
    {
        if (m_cache.contains(key))
        {
            return m_cache.value(key).toBool();
        }
    
        return default;
    }
    
    int Config::readInt(const QString &key, int default)
    {
        if (m_cache.contains(key))
        {
            return m_cache.value(key).toInt();
        }
    
        return default;
    }
  • 相关阅读:
    JAVA课上课后问题总结(2019.09.20)
    JAVA课后问题汇总(第三次课)
    java课后作业:记录创建对象数
    《程序员修炼之道》读后感(一)【第二章与第三章】
    [java web]小学四则运算出题系统
    apache连接数
    isql导出表到文本
    iis6上的FTP有缓存
    Perl 标量的操作符
    apachetomcat
  • 原文地址:https://www.cnblogs.com/dengyg0710/p/10836890.html
Copyright © 2011-2022 走看看