如何在Qt中用Json作为配置文件?一个便捷的Qt JSON配置文件操纵类!

QJSONConfig是我设计的一个JSON配置文件读写类,支持以一种简便的方式存取配置信息,同时采用JSON格式,小巧易读。它还支持嵌套配置信息存取,为复杂信息的管理提供了有效的手段。内部与Qt5或6兼容,适合在Qt应用程序中使用。
目录

获取和使用QJSONConfig

QJSONConfig的基本使用

    配置信息的写入

    配置信息的读取

    配置文件的保存与清除

获取和使用QJSONConfig

获取是非常容易办到的,只需

1
git clone https://github.com/zxunge/QJSONConfig.git

然后,你可以将QJSONConfig复制到项目目录中,在源代码中包含qjsonconfig.h即可(记住要添加include路径哦)

QJSONConfig的基本使用

首先我们需要定义一个QJSONConfig对象:

1
QJSONConfig cfg("cfg.json");

构造QJSONConfig时需要传递配置文件的名称。默认的名称是config.json。

接下来,我们需要读写配置内容。但是读者可能会问了,如果是第一次运行应用程序,那么怎么初始化相关配置呢?QJSONConfig已经为我们想好了。它提供了一个empty()用于判断配置是否为空:

1
2
3
4
if (cfg.empty())
{
// do stuff
}

配置信息的写入

写入配置信息时,有两种方式。官方推荐的,是采用setValue():

1
cfg.setValue("key", value);

这里的value是一个QVariant,具体支持的类型,可以见Variant types,这里列出了一些元类型对应的转换结果,可以作为支持类型的参考。如果没有提供value参数会怎样?key会被初始化成空值。

这里有个嵌套配置信息的使用。有时我们想把某些信息归类到某个东西底下,怎么办呢?使用斜杠:

1
2
3
cfg.setValue("app/name", "auhu");
cfg.setValue("app/style", "fusion");
cfg.setValue("app/style/file", "sss.qss");

这些信息也会以嵌套形式储存在json文件中。

另一种是使用[]运算符实现读写统一,但它有严重缺陷,感兴趣的读者可自行研究。

配置信息的读取

读取配置信息最佳做法便是使用下标运算符:

1
2
3
4
5
QVariant value = cfg["key"];
int value = cfg["key"].toInt();
double value = cfg["key"].toDouble();
QString value = cfg["key"].toString();
// .........

要注意的是,取下标得到的结果是QVariant,必要时需要调用相关toXXX()实现类型转换。

使用getValue()也可达到同样效果:

1
2
3
4
5
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()函数用于同步配置信息(这不仅是代码→文件,也是文件→代码):

1
cfg.sync();

clear()则清除所有内容:

1
2
cfg.clear();
// All is gone...

限于时间,更多内容请见仓库里的demo!欢迎issue,和PR!

如何在Qt中用Json作为配置文件?一个便捷的Qt JSON配置文件操纵类!

https://zxunge.github.io/blogs/2025/04/如何在Qt中用Json作为配置文件?一个便捷的Qt-JSON配置文件操纵类!/

作者

zxunge

发布于

2025-04-03

更新于

2025-04-03

许可协议

评论