DtkCore
DTK Core module
载入中...
搜索中...
未找到
Dtk::Core::DConfig类 参考

配置策略提供的接口类 更多...

#include <dconfig.h>

类 Dtk::Core::DConfig 继承关系图:
Dtk::Core::DObject

信号

void valueChanged (const QString &key)
 

Public 成员函数

 DConfig (const QString &name, const QString &subpath=QString(), QObject *parent=nullptr)
 
 DConfig (DConfigBackend *backend, const QString &name, const QString &subpath=QString(), QObject *parent=nullptr)
 
QString backendName () const
 配置策略后端名称
 
QStringList keyList () const
 
bool isValid () const
 判断此后端是否可用
 
bool isDefaultValue (const QString &key) const
 检测指定配置项名称对应的值是否为默认值。
 
QVariant value (const QString &key, const QVariant &fallback=QVariant()) const
 根据配置项名称获得对应值
 
void setValue (const QString &key, const QVariant &value)
 根据配置项名称设置其值
 
void reset (const QString &key)
 设置其配置项对应的默认值,此值为经过override机制覆盖后的值,不一定为此配置文件中meta中定义的值
 
QString name () const
 返回配置文件名称
 
QString subpath () const
 返回配置文件对应的子目录
 

静态 Public 成员函数

static DConfigcreate (const QString &appId, const QString &name, const QString &subpath=QString(), QObject *parent=nullptr)
 构造配置策略提供的对象,指定配置所属的应用Id,管理某一特定应用的配置。
 
static DConfigcreate (DConfigBackend *backend, const QString &appId, const QString &name, const QString &subpath=QString(), QObject *parent=nullptr)
 构造配置策略提供的对象,指定配置所属的应用Id。
 
static DConfigcreateGeneric (const QString &name, const QString &subpath=QString(), QObject *parent=nullptr)
 构造配置策略提供的对象,用来管理与应用无关的配置。
 
static DConfigcreateGeneric (DConfigBackend *backend, const QString &name, const QString &subpath=QString(), QObject *parent=nullptr)
 
static void setAppId (const QString &appId)
 显示指定应用Id,不采用DSGApplication::id()作为应用Id
 

属性

QStringList keyList
 获得所有可用的配置项名称
 

额外继承的成员函数

- Protected 成员函数 继承自 Dtk::Core::DObject
 DObject (DObject *parent=nullptr)
 
 DObject (DObjectPrivate &dd, DObject *parent=nullptr)
 
- Protected 属性 继承自 Dtk::Core::DObject
QScopedPointer< DObjectPrivated_d_ptr
 

详细描述

配置策略提供的接口类

概述

此接口规范定义了开发库所提供的关于配置文件读写的相关接口,如果应用程序所使用的开发库实现了此规范,则程序应当优先使用开发库提供的接口。

项目目录结构如下:

├── CMakeLists.txt
├── config
│ └── example.json
└── main.cpp

CMakeLists.txt

cmake_minimum_required(VERSION 3.1.0) # 指定cmake最低版本
project(dconfig-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) # support qt resource file # 支持qt资源文件
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": ["global"],
"name": "map",
"permissions": "readwrite",
"visibility": "public"
}
}
}

main.cpp

#include <DConfig>
#include <QDebug>
#include <QCoreApplication>
DCORE_USE_NAMESPACE
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 构造DConfig,元数据文件名example,与元数据安装目录的/usr/share/dsg/configs/APPID名(可执行文件名)对应目录/example.json,
DConfig config("example");
// 判断是否有效
if (!config.isValid()) {
qWarning() << QString("DConfig无效, name:[%1].").
arg(config.name());
return 0;
}
// 获取所有配置项的key
qDebug() << "所有的所有配置项的key:" << config.keyList();
// 获取指定配置项的值,配置项可以是字符串,数组,map容器,布尔值,整型,详见example.json
qDebug() << "canExit对应的值:" << config.value("canExit").toBool();
QVariantMap map;
for (int i = 0; i < 1; i++) {
QVariantMap nestItem;
for (int j = 0; j < 1; j++) {
nestItem[QString::number(j)] = QString::number(j);
}
map[QString::number(i)] = nestItem;
}
QScopedPointer<DConfig> heapConfig;
heapConfig.reset(new DConfig("example"));
if (!heapConfig->isValid()) {
qWarning() << QString("DConfig无效, name:[%1].").
arg(heapConfig->name());
return 0;
}
// 监听值改变的信号
const bool &oldValue = heapConfig->value("canExit").toBool();
QObject::connect(heapConfig.get(), &DConfig::valueChanged, [oldValue,&heapConfig](const QString &key){
qDebug() << "canExit原来的值:" << oldValue << ", canExit新的值:" << heapConfig->value(key).toBool();
});
// 重置canExit的值
heapConfig->setValue("canExit", !oldValue);
return a.exec();
}
配置策略提供的接口类
Definition dconfig.h:30

从源码构建

mkdir build && cd build
# 修改路径前缀为/usr,GNU标准的默认值为/usr/local
cmake .. -DCMAKE_INSTALL_PREFIX=/usr
make
sudo make install

结果如下图

example

成员函数说明

◆ backendName()

QString Dtk::Core::DConfig::backendName ( ) const

配置策略后端名称

返回
配置策略后端名称
注解
调用者只能用DConfig访问DConfigBackend对象,所以不返回DConfigBackend对象。

◆ create() [1/2]

static DConfig * Dtk::Core::DConfig::create ( const QString &  appId,
const QString &  name,
const QString &  subpath = QString(),
QObject *  parent = nullptr 
)
static

构造配置策略提供的对象,指定配置所属的应用Id,管理某一特定应用的配置。

参数
[in]appId配置文件所属的应用Id,为空时默认为本应用Id
[in]name配置文件名
[in]subpath配置文件对应的子目录
[in]parent父对象
返回
构造的配置策略对象,由调用者释放

◆ create() [2/2]

static DConfig * Dtk::Core::DConfig::create ( DConfigBackend backend,
const QString &  appId,
const QString &  name,
const QString &  subpath = QString(),
QObject *  parent = nullptr 
)
static

构造配置策略提供的对象,指定配置所属的应用Id。

参数
[in]backend调用者继承于DConfigBackend的配置策略后端
[in]appId配置文件所属的应用Id,为空时默认为本应用Id
[in]name配置文件名
[in]subpath配置文件对应的子目录
[in]parent父对象
返回
构造的配置策略对象,由调用者释放

◆ createGeneric() [1/2]

static DConfig * Dtk::Core::DConfig::createGeneric ( const QString &  name,
const QString &  subpath = QString(),
QObject *  parent = nullptr 
)
static

构造配置策略提供的对象,用来管理与应用无关的配置。

参数
[in]name配置文件名
[in]subpath配置文件对应的子目录
[in]parent父对象
返回
构造的配置策略对象,由调用者释放
注解
如果我们管理针对某一特定应用的配置,应该使用 Dtk::Core::DConfig::create(),或 Dtk::Core::DConfig(),来指定所属应用的appId。

◆ createGeneric() [2/2]

static DConfig * Dtk::Core::DConfig::createGeneric ( DConfigBackend backend,
const QString &  name,
const QString &  subpath = QString(),
QObject *  parent = nullptr 
)
static

◆ isDefaultValue()

bool Dtk::Core::DConfig::isDefaultValue ( const QString &  key) const

检测指定配置项名称对应的值是否为默认值。

参数
[in]key配置项名称

◆ reset()

void Dtk::Core::DConfig::reset ( const QString &  key)

设置其配置项对应的默认值,此值为经过override机制覆盖后的值,不一定为此配置文件中meta中定义的值

参数
[in]key配置项名称

◆ setAppId()

static void DConfig::setAppId ( const QString &  appId)
static

显示指定应用Id,不采用DSGApplication::id()作为应用Id

参数
[in]appId配置文件所属的应用Id
注解
需要在QCoreApplication构造前设置。

◆ setValue()

void Dtk::Core::DConfig::setValue ( const QString &  key,
const QVariant &  value 
)

根据配置项名称设置其值

参数
[in]key配置项名称
[in]value需要更新的值

◆ value()

QVariant Dtk::Core::DConfig::value ( const QString &  key,
const QVariant &  fallback = QVariant() 
) const

根据配置项名称获得对应值

参数
[in]key配置项名称
[in]fallback没有获取到配置项值后提供的默认值

属性说明

◆ keyList

QStringList Dtk::Core::DConfig::keyList
read

获得所有可用的配置项名称

返回
配置项名称集合

该类的文档由以下文件生成: