如何在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!

Code::Blocks 25.03重磅来袭:良久的积累,崭新的功能

时隔5年,Code::Blocks,这一开源的C/C++、Fortran IDE,尤长于开发wxWidgets应用程序,终于发布了新版:25.03。就在前几十个小时里,Code::Blocks官方宣布了这一消息。

话不多说,先上链接:Release 25.03 has arrived

Code::Blocks is a free C/C++ and Fortran IDE built to meet the most demanding needs of its users. It is designed to be very extensible and fully configurable.

Built around a plugin framework, Code::Blocks can be extended with plugins. Any kind of functionality can be added by installing/coding a plugin. For instance, event compiling and debugging functionality is provided by plugins!