如何在Qt中用Json作为配置文件?一个便捷的Qt JSON配置文件操纵类!
目录
警告(WARNING):本文已过时;该项目已更名为’QJsonConfigurator’
QJSONConfig是我设计的一个JSON配置文件读写类,支持以一种简便的方式存取配置信息,同时采用JSON格式,小巧易读。它还支持嵌套配置信息存取,为复杂
信息的管理提供了有效的手段。内部与Qt5或6兼容,适合在Qt应用程序中使用
获取和使用QJSONConfig
获取是非常容易办到的,只需
git clone https://github.com/zxunge/QJSONConfig.git
然后,你可以将QJSONConfig复制到项目目录中,在源代码中包含qjsonconfig.h即可(记住要添加include路径哦)
QJSONConfig的基本使用
首先我们需要定义一个QJSONConfig对象:
QJSONConfig cfg("cfg.json");
构造QJSONConfig时需要传递配置文件的名称。默认的名称是config.json。
接下来,我们需要读写配置内容。但是读者可能会问了,如果是第一次运行应用程序,那么怎么初始化相关配置呢?QJSONConfig已经为我们想好了。它提供了一个empty()用于判断配置是否为空:
if (cfg.empty())
{
// do stuff
}
配置信息的写入
写入配置信息时,有两种方式。官方推荐的,是采用setValue():
cfg.setValue("key", value);
这里的value是一个QVariant,具体支持的类型,可以见Variant types,这里列出了一些元类型对应的转换结果,可以作为支持类型的参考。如果没有提供value参数会怎样?key会被初始化成空值。
这里有个嵌套配置信息的使用。有时我们想把某些信息归类到某个东西底下,怎么办呢?使用斜杠:
cfg.setValue("app/name", "auhu");
cfg.setValue("app/style", "fusion");
cfg.setValue("app/style/file", "sss.qss");
这些信息也会以嵌套形式储存在json文件中。
另一种是使用[]运算符实现读写统一,但它有严重缺陷,感兴趣的读者可自行研究。
配置信息的读取
读取配置信息最佳做法便是使用下标运算符:
QVariant value = cfg["key"];
int value = cfg["key"].toInt();
double value = cfg["key"].toDouble();
QString value = cfg["key"].toString();
// .........
要注意的是,取下标得到的结果是QVariant,必要时需要调用相关toXXX()实现类型转换。
使用getValue()也可达到同样效果:
QVariant value = cfg.getValue("key");
int value = cfg.getValue("key").toInt();
double value = cfg.getValue("key").toDouble();
QString value = cfg.getValue("key").toString();
// .........
嵌套信息的读取,使用斜杠即可。
getValue()第二个参数是默认值,表明当没有key时的返回值。
配置文件的保存与清除
sync()函数用于同步配置信息(这不仅是代码→文件,也是文件→代码):
cfg.sync();
clear()则清除所有内容:
cfg.clear();
// All is gone...
限于时间,更多内容请见仓库里的demo!欢迎issue,和PR!