规范配置文件读写的相关接口的配置文件实现
概述
规范配置文件读写的相关接口的配置文件实现
项目目录结构如下:
├── CMakeLists.txt
├── config
│ └── example.json
└── main.cpp
CMakeLists.txt
cmake_minimum_required(VERSION 3.1.0) # 指定cmake最低版本
project(dconfigfile-example VERSION 1.0.0 LANGUAGES CXX) # 指定项目名称, 版本, 语言 cxx就是c++
set(CMAKE_CXX_STANDARD 11) # 指定c++标准
set(CMAKE_CXX_STANDARD_REQUIRED ON) # 指定c++标准要求,至少为11以上
set(CMAKE_AUTOMOC ON) # 支持qt moc
set(CMAKE_AUTORCC ON) # 支持qt资源文件
set(CMAKE_AUTOUIC ON) # 支持qt ui文件(非必须)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # 支持 clangd
if (CMAKE_VERSION VERSION_LESS "3.7.0") # 如果cmake版本小于3.7.0
set(CMAKE_INCLUDE_CURRENT_DIR ON) # 设置包含当前目录
endif()
find_package(Qt5 REQUIRED COMPONENTS Core) # 寻找Qt5组件Core
find_package(Dtk REQUIRED COMPONENTS Core) # 寻找Dtk组件Core
add_executable(${PROJECT_NAME} # 生成可执行文件
main.cpp
)
target_link_libraries(${PROJECT_NAME} PRIVATE # 添加需要链接的共享库
Qt5::Core
dtkcore
)
# dtk_add_config_meta_files函数,部署一些"meta"的配置。
# 函数定义在dtkcore的cmake目录下
# APPID 应用的ID
# FILES 需要部署的文件。
dtk_add_config_meta_files(
APPID ${PROJECT_NAME}
FILES ./config/example.json
)
example.json
{
"magic": "dsg.config.meta",
"version": "1.0",
"contents": {
"canExit": {
"value": true,
"serial": 0,
"flags": ["global"],
"name": "I am name",
"name[zh_CN]": "我是名字",
"description": "I am description",
"permissions": "readwrite",
"visibility": "private"
},
"key1": {
"value": "125",
"serial": 0,
"flags": ["nooverride"],
"name": "I am name",
"name[zh_CN]": "我是名字",
"description": "I am description",
"permissions": "readwrite",
"visibility": "public"
},
"number": {
"value": 1,
"serial": 0,
"flags": ["global"],
"name": "array value type",
"permissions": "readwrite",
"visibility": "public"
},
"array": {
"value": ["value1", "value2"],
"serial": 0,
"flags": ["global"],
"name": "array",
"permissions": "readwrite",
"visibility": "public"
},
"map": {
"value": {"key1": "value1", "key2": "value2"},
"serial": 0,
"flags": ["nooverride"],
"name": "map",
"permissions": "readwrite",
"visibility": "public"
},
"publicConfig": {
"value": true,
"serial": 0,
"flags": ["user-public"],
"name": "public configure",
"name[zh_CN]": "我是公开的配置",
"description": "I am public configure",
"permissions": "readwrite",
"visibility": "private"
}
}
}
main.cpp
#include <DConfigFile>
#include <QDebug>
#include <QCoreApplication>
#include <unistd.h>
DCORE_USE_NAMESPACE
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
DConfigFile configFile(
"dconfigfile-example",
"example");
configFile.load();
QScopedPointer<DConfigCache> userCache(configFile.createUserCache(getuid()));
userCache->load();
if (!configFile.isValid()) {
qWarning() << QString("DConfig无效.");
return 0;
}
qDebug() << "所有的所有配置项的key:" << configFile.meta()->keyList();
qDebug() << "canExit对应的值:" << configFile.value("canExit").toBool();
qDebug() << "配置项的可见性" << configFile.meta()->visibility("canExit");
QVariantMap map;
map.insert("k1","v1");
map.insert("k2","v2");
configFile.setValue("map", map, "dconfigfile-example", userCache.get());
configFile.save();
userCache->save();
return a.exec();
}
规范配置文件读写的相关接口的配置文件实现
Definition dconfigfile.h:26
从源码构建
mkdir build && cd build
# 修改路径前缀为/usr,GNU标准的默认值为/usr/local
cmake .. -DCMAKE_INSTALL_PREFIX=/usr
sudo make install
sudo ./dconfigfile-example
结果如下图
一些简单的输出