DtkCore
DTK Core module
载入中...
搜索中...
未找到
dconfigfile.h
浏览该文件的文档.
1// SPDX-FileCopyrightText: 2021 - 2023 UnionTech Software Technology Co., Ltd.
2//
3// SPDX-License-Identifier: LGPL-3.0-or-later
4
5#ifndef DCONFIGFILE_H
6#define DCONFIGFILE_H
7
8#include <dtkcore_global.h>
9#include <DObject>
10#include <QStringList>
11#include <QFlags>
12#include <QVariant>
13#include <QLocale>
14#include <QJsonDocument>
15#include <QDebug>
16
17QT_BEGIN_NAMESPACE
18class QIODevice;
19QT_END_NAMESPACE
20
21DCORE_BEGIN_NAMESPACE
22
23class DConfigMeta;
24class DConfigCache;
25class DConfigFilePrivate;
26class LIBDTKCORESHARED_EXPORT DConfigFile : public DObject{
27 D_DECLARE_PRIVATE(DConfigFile)
28public:
29 enum Flag {
30 NoOverride = 1 << 0,
31 Global = 1 << 1,
32 UserPublic = 1 << 2
33 };
34 Q_DECLARE_FLAGS(Flags, Flag)
35
38 ReadWrite
39 };
40
43 Public
44 };
45
46 struct Version {
47 quint16 major;
48 quint16 minor;
49 };
50
51 static constexpr Version supportedVersion();
52
53 explicit DConfigFile(const QString &appId, const QString &name,
54 const QString &subpath = QString());
55 explicit DConfigFile(const DConfigFile &other);
56
57 bool load(const QString &localPrefix = QString());
58 bool load(QIODevice *meta, const QList<QIODevice*> &overrides);
59
60 bool save(const QString &localPrefix = QString(), QJsonDocument::JsonFormat format = QJsonDocument::Indented,
61 bool sync = false) const;
62
63 bool isValid() const;
64 QVariant value(const QString &key, DConfigCache *userCache = nullptr) const;
65 QVariant cacheValue(DConfigCache *userCache, const QString &key) const;
66 bool setValue(const QString &key, const QVariant &value, const QString &callerAppid,
67 DConfigCache *userCache = nullptr);
68
69 DConfigCache *createUserCache(const uint uid);
71
73
74protected:
75 friend QDebug operator<<(QDebug, const DConfigFile &);
76};
77
78class LIBDTKCORESHARED_EXPORT DConfigMeta {
79public:
80 virtual ~DConfigMeta();
81 virtual DConfigFile::Version version() const = 0;
82 virtual void setVersion(quint16 major, quint16 minor) = 0;
83
84 virtual bool load(const QString &localPrefix = QString()) = 0;
85
86 virtual bool load(QIODevice *meta, const QList<QIODevice*> &overrides) = 0;
87
88 virtual QStringList keyList() const = 0;
89 virtual DConfigFile::Flags flags(const QString &key) const = 0;
90 virtual DConfigFile::Permissions permissions(const QString &key) const = 0;
91 virtual DConfigFile::Visibility visibility(const QString &key) const = 0;
92 virtual int serial(const QString &key) const = 0;
93
94 virtual QString displayName(const QString &key, const QLocale &locale) = 0;
95 virtual QString description(const QString &key, const QLocale &locale) = 0;
96
97 virtual QString metaPath(const QString &localPrefix = QString(), bool *useAppId = nullptr) const = 0;
98 virtual QStringList allOverrideDirs(const bool useAppId, const QString &prefix = QString()) const = 0;
99
100 virtual QVariant value(const QString &key) const = 0;
101 static QStringList genericMetaDirs(const QString &localPrefix = QString());
102 static QStringList applicationMetaDirs(const QString &localPrefix, const QString &appId);
103};
104
105class LIBDTKCORESHARED_EXPORT DConfigCache {
106public:
107 virtual ~DConfigCache();
108
109 virtual bool load(const QString &localPrefix = QString()) = 0;
110 virtual bool save(const QString &localPrefix = QString(),
111 QJsonDocument::JsonFormat format = QJsonDocument::Indented, bool sync = false) = 0;
112 virtual bool isGlobal() const = 0;
113
114 virtual void remove(const QString &key) = 0;
115 virtual QStringList keyList() const = 0;
116 virtual bool setValue(const QString &key, const QVariant &value, const int serial,
117 const uint uid, const QString &callerAppid) = 0;
118 virtual QVariant value(const QString &key) const = 0;
119 virtual int serial(const QString &key) const = 0;
120 virtual uint uid() const = 0;
121
122 virtual void setCachePathPrefix(const QString &prefix) = 0;
123};
124
125#ifndef QT_NO_DEBUG_STREAM
126Q_CORE_EXPORT QDebug operator<<(QDebug, const DConfigFile &);
127#endif
128
129Q_DECLARE_OPERATORS_FOR_FLAGS(DConfigFile::Flags)
130
131DCORE_END_NAMESPACE
132
133#endif // DCONFIGFILE_H
提供配置文件的用户和全局运行缓存访问接口
Definition dconfigfile.h:105
virtual bool setValue(const QString &key, const QVariant &value, const int serial, const uint uid, const QString &callerAppid)=0
设置缓存中的值
virtual bool save(const QString &localPrefix=QString(), QJsonDocument::JsonFormat format=QJsonDocument::Indented, bool sync=false)=0
保存缓存的值到磁盘中
virtual void remove(const QString &key)=0
删除缓存中的配置项
virtual QStringList keyList() const =0
返回配置内容的所有配置项
virtual int serial(const QString &key) const =0
返回配置项的单调递增值
virtual bool isGlobal() const =0
是否是全局缓存
virtual QVariant value(const QString &key) const =0
获取缓存中的值
virtual uint uid() const =0
用户标识,为全局缓存时,uid为非用户标识的特定值
virtual bool load(const QString &localPrefix=QString())=0
解析缓存配置文件
规范配置文件读写的相关接口的配置文件实现
Definition dconfigfile.h:26
bool isValid() const
检测配置文件是否有效
bool load(QIODevice *meta, const QList< QIODevice * > &overrides)
解析配置文件流
static constexpr Version supportedVersion()
支持的版本
QVariant cacheValue(DConfigCache *userCache, const QString &key) const
DConfigFile::cacheValue 获取指定用户缓存的配置项值,若无此配置项的用户缓存值,返回无效值
bool load(const QString &localPrefix=QString())
解析配置文件
bool setValue(const QString &key, const QVariant &value, const QString &callerAppid, DConfigCache *userCache=nullptr)
设置缓存中的值
DConfigFile(const QString &appId, const QString &name, const QString &subpath=QString())
DConfigFile构造函数,构造配置文件管理对象。
DConfigCache * createUserCache(const uint uid)
创建用户缓存
Flag
配置项名称
Definition dconfigfile.h:29
DConfigFile(const DConfigFile &other)
DConfigFile构造函数,构造配置文件管理对象。
DConfigMeta * meta()
返回原型对象
QVariant value(const QString &key, DConfigCache *userCache=nullptr) const
DConfigFile::value
bool save(const QString &localPrefix=QString(), QJsonDocument::JsonFormat format=QJsonDocument::Indented, bool sync=false) const
保存缓存的值到磁盘中
DConfigCache * globalCache() const
返回全局缓存
Permissions
配置项的权限
Definition dconfigfile.h:36
@ ReadOnly
将配置项覆盖为只读
Definition dconfigfile.h:37
Visibility
配置项的可见性
Definition dconfigfile.h:41
@ Private
仅限程序内部使用,对外不可见。此类配置项完全由程序自己读写,可随意增删改写其含义,无需做兼容性考虑
Definition dconfigfile.h:42
提供配置文件的原型和覆盖机制的访问接口
Definition dconfigfile.h:78
virtual DConfigFile::Visibility visibility(const QString &key) const =0
返回指定配置项的可见性
virtual DConfigFile::Flags flags(const QString &key) const =0
返回指定配置项的特性
virtual bool load(QIODevice *meta, const QList< QIODevice * > &overrides)=0
解析配置文件流
virtual DConfigFile::Version version() const =0
返回配置版本信息
virtual QString metaPath(const QString &localPrefix=QString(), bool *useAppId=nullptr) const =0
返回描述文件的路径
virtual QVariant value(const QString &key) const =0
meta初始值经过覆盖机制覆盖后的原始值
virtual DConfigFile::Permissions permissions(const QString &key) const =0
返回指定配置项的权限
virtual int serial(const QString &key) const =0
返回配置项的单调递增值
virtual QStringList allOverrideDirs(const bool useAppId, const QString &prefix=QString()) const =0
获得前缀为 prefix 目录的所有需要查找的覆盖机制目录
virtual bool load(const QString &localPrefix=QString())=0
解析配置文件
virtual QString description(const QString &key, const QLocale &locale)=0
返回指定配置项的描述信息
virtual QString displayName(const QString &key, const QLocale &locale)=0
返回指定配置项的显示名
virtual void setVersion(quint16 major, quint16 minor)=0
设置配置版本信息
virtual QStringList keyList() const =0
返回配置内容的所有配置项
Definition dobject.h:25
版本信息
Definition dconfigfile.h:46