Qt读写Json格式配置文件
Posted dengyg0710
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt读写Json格式配置文件相关的知识,希望对你有一定的参考价值。
头文件DConfig.h
1 #pragma once 2 3 #include <QSettings> 4 #include <QFile> 5 #include <QJsonDocument> 6 #include <QJsonObject> 7 #include <QJsonArray> 8 9 class DConfig 10 { 11 public: 12 DConfig(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 };
源文件DConfig.cpp
#include "DConfig.h" DConfig::DConfig(const QString &fileName) : m_jsonPath(fileName) { QFile loadFile(m_jsonPath); if (!loadFile.open(QIODevice::ReadOnly)) { return; } QByteArray allData = loadFile.readAll(); loadFile.close(); allData.remove(allData.size() - 3, 3); allData.remove(0, 6); QJsonParseError jsondError; QJsonDocument jsonDoc = QJsonDocument::fromJson(allData, &jsondError); if (jsondError.error != QJsonParseError::NoError) { return; } m_rootObj = jsonDoc.object(); } void DConfig::write(const QString &key, const QVariant &value) { m_rootObj.insert(key, value.toJsonValue()); QJsonArray arr; arr.push_back(m_rootObj); QJsonDocument jsonDoc(arr); QByteArray jsonArry = jsonDoc.toJson(); QFile file(m_jsonPath); if (!file.open(QIODevice::WriteOnly)) { return; } file.write(jsonArry); file.close(); } QVariant DConfig::read(const QString &key, const QString &default) { if (hasParam(key)) { QVariant subObj = m_rootObj.value(key).toVariant(); return subObj; } return default; } QString DConfig::readString(const QString &key, const QString &default) { if (hasParam(key)) { QString subObj = m_rootObj.value(key).toString(); return subObj; } return default; } bool DConfig::readBool(const QString &key, bool default) { if (hasParam(key)) { bool subObj = m_rootObj.value(key).toBool(); return subObj; } return default; } float DConfig::readFloat(const QString &key, float default) { if (hasParam(key)) { float subObj = m_rootObj.value(key).toDouble(); return subObj; } return default; } int DConfig::readInt(const QString &key, int default) { if (hasParam(key)) { int subObj = m_rootObj.value(key).toInt(); return subObj; } return default; } bool DConfig::hasParam(const QString &key) { return m_rootObj.contains(key); }
注意:由于QT保存的Json格式外部有中括号,但读取时有中括号会报错,因此需要删除,以下cpp内的代码是为了删除中括号,首尾各占3个字符
allData.remove(allData.size() - 3, 3); allData.remove(0, 6);
而首部删除6个字符,是防止手动修改json时多出来的3个编码格式字符
以上是关于Qt读写Json格式配置文件的主要内容,如果未能解决你的问题,请参考以下文章
Qt读写三种文件,QSettings读ini配置文件,QJsonDocument读JSON文件,QDomDocument读xml文件