头文件Config.h

 1 #pragma once
 2 
 3 #include <QSettings>
 4 #include <QFile>
 5 #include <QJsonDocument>
 6 #include <QJsonObject>
 7 #include <QJsonArray>
 8 
 9 class Config
10 {
11 public:
12     Config(const QString &fileName);
13 
14     void write(const QString &key, const QVariant& value);
15     QVariant read(const QString &key, const QString &default = "");
16     bool hasParam(const QString &key);
17     QString readString(const QString &key, const QString &default = "");
18     bool readBool(const QString &key, bool default = false);
19     float readFloat(const QString &key, float default = 0.0f);
20     int readInt(const QString &key, int default = 0);
21     
22 private:
23     QJsonObject m_rootObj;
24     QString m_jsonPath;
25 };

源文件Config.cpp

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
 1 #include "Config.h"
 2 
 3 Config::Config(const QString &fileName) : m_jsonPath(fileName)
 4 {
 5     QFile loadFile(m_jsonPath);
 6     if (!loadFile.open(QIODevice::ReadOnly))
 7     {
 8         return;
 9     }
10     QByteArray allData = loadFile.readAll();
11     loadFile.close();
12     //由于QT保存的Json格式外部有中括号,但读取时有中括号会报错,因此需要删除,以下两行代码是为了删除中括号,首尾各占3个字符
13     //而首部删除6个字符,是防止手动修改json文件时多出来的3个编码格式字符
14     allData.remove(allData.size() - 3, 3);
15     allData.remove(0, 6);
16     QJsonParseError jsondError;
17     QJsonDocument jsonDoc = QJsonDocument::fromJson(allData, &jsondError);
18     if (jsondError.error != QJsonParseError::NoError)
19     {
20         return;
21     }
22     m_rootObj = jsonDoc.object();
23 }
24 
25 void Config::write(const QString &key, const QVariant &value)
26 {
27     m_rootObj.insert(key, value.toJsonValue());
28     QJsonArray arr;
29     arr.push_back(m_rootObj);
30     QJsonDocument jsonDoc(arr);
31     QByteArray jsonArry = jsonDoc.toJson();
32     QFile file(m_jsonPath);
33     if (!file.open(QIODevice::WriteOnly))
34     {
35         return;
36     }
37     file.write(jsonArry);
38     file.close();
39 }
40 
41 QVariant Config::read(const QString &key, const QString &default)
42 {
43     if (hasParam(key))
44     {
45         QVariant subObj = m_rootObj.value(key).toVariant();
46         return subObj;
47     }
48     return default;
49 }
50 
51 QString Config::readString(const QString &key, const QString &default)
52 {
53     if (hasParam(key))
54     {
55         QString subObj = m_rootObj.value(key).toString();
56         return subObj;
57     }
58     return default;
59 }
60 
61 bool Config::readBool(const QString &key, bool default)
62 {
63     if (hasParam(key))
64     {
65         bool subObj = m_rootObj.value(key).toBool();
66         return subObj;
67     }
68     return default;
69 }
70 
71 float Config::readFloat(const QString &key, float default)
72 {
73     if (hasParam(key))
74     {
75         float subObj = m_rootObj.value(key).toDouble();
76         return subObj;
77     }
78     return default;
79 }
80 
81 int Config::readInt(const QString &key, int default)
82 {
83     if (hasParam(key))
84     {
85         int subObj = m_rootObj.value(key).toInt();
86         return subObj;
87     }
88     return default;
89 }
90 
91 bool Config::hasParam(const QString &key)
92 {
93     return m_rootObj.contains(key);
94 }

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄