diff --git a/docs/global/dconfig.zh_CN.dox b/docs/global/dconfig.zh_CN.dox index d559472b..853d3d0b 100644 --- a/docs/global/dconfig.zh_CN.dox +++ b/docs/global/dconfig.zh_CN.dox @@ -344,6 +344,11 @@ sudo make install @param[in] parent 父对象 @note 调用者只构造backend,由DConfig释放。 +@fn static void DConfig::setAppId(const QString &appId) +@brief 显示指定应用Id,不采用DSGApplication::id()作为应用Id +@param[in] appId 配置文件所属的应用Id +@note 需要在QCoreApplication构造前设置。 + @fn QString Dtk::Core::DConfig::backendName() @brief 配置策略后端名称 @return 配置策略后端名称 diff --git a/include/global/dconfig.h b/include/global/dconfig.h index 4cf2402a..8759a489 100644 --- a/include/global/dconfig.h +++ b/include/global/dconfig.h @@ -49,6 +49,8 @@ class LIBDTKCORESHARED_EXPORT DConfig : public QObject, public DObject static DConfig *createGeneric(DConfigBackend *backend, const QString &name, const QString &subpath = QString(), QObject *parent = nullptr); + static void setAppId(const QString &appId); + QString backendName() const; QStringList keyList() const; diff --git a/src/dconfig.cpp b/src/dconfig.cpp index 1f01c9a5..957f7465 100644 --- a/src/dconfig.cpp +++ b/src/dconfig.cpp @@ -100,6 +100,7 @@ DConfigBackend::~DConfigBackend() { } +static QString _globalAppId; class Q_DECL_HIDDEN DConfigPrivate : public DObjectPrivate { public: @@ -600,7 +601,7 @@ DConfig::DConfig(const QString &name, const QString &subpath, QObject *parent) } DConfig::DConfig(DConfigBackend *backend, const QString &name, const QString &subpath, QObject *parent) - : DConfig(backend, DSGApplication::id(), name, subpath, parent) + : DConfig(backend, _globalAppId.isEmpty() ? DSGApplication::id() : _globalAppId, name, subpath, parent) { } @@ -645,6 +646,20 @@ DConfig *DConfig::createGeneric(DConfigBackend *backend, const QString &name, co return new DConfig(backend, NoAppId, name, subpath, parent); } +/*! + * \brief Explicitly specify application Id for config. + * \param appId + * @note It's should be called before QCoreApplication constructed. + */ +void DConfig::setAppId(const QString &appId) +{ + if (!_globalAppId.isEmpty()) { + qCWarning(cfLog, "`setAppId`should only be called once."); + } + _globalAppId = appId; + qCDebug(cfLog, "Explicitly specify application Id as appId=%s for config.", qPrintable(appId)); +} + /*! @~english * @brief Use custom configuration policy backend to construct objects