繁体   English   中英

如何管理自定义Qt插件的依赖关系(不适用于Qt Creator)?

[英]How to manage the dependencies of custom Qt plugin (not for Qt Creator)?

我最近开始只是为了好玩而在Qt中使用插件。 我仍然不知道的一件事是如何定义和管理插件对其他插件(和库)的依赖关系。 我使用的是Plug&Paint示例

例如,当涉及到Qt Creator时 ,有两个变量可以处理此问题,即QTC_PLUGIN_DEPENDS (用于依赖其他插件)和QTC_LIB_DEPENDS (用于依赖特定库)。 例如,有VcsBase (版本控制系统基础插件):

QTC_PLUGIN_NAME = VcsBase
QTC_LIB_DEPENDS += \  // <--------------------libraries the Qt Creator plugin depends on
    aggregation \
    cplusplus \
    extensionsystem \
    utils
QTC_PLUGIN_DEPENDS += \ //<-------------------other plugins the Qt Creator plugin depends on
    coreplugin \
    texteditor \
    projectexplorer \
    cpptools \
    diffeditor
QTC_PLUGIN_RECOMMENDS += \
cpaster

如您所见,它具有多个库和插件依赖性。 根据我对IDE中所有这些的了解,所有插件至少都依赖于其他插件依赖项,即coreplugin 除此以外,其他插件还为依赖于这些插件的插件提供了部分功能。

继续示例,我们有GitSVN等插件,它们都依赖于VcsBase因为它们都依赖于该插件提供的功能。

我可以研究这两个变量,但我觉得应该有一种更好的方法,而不是仅筛选Qt Creator的代码(不完全适合初学者)。 我检查了QPluginLoader,但是与术语“ 依赖”相关的唯一东西是平台无关的 ,这不是我想要的。

“简单”的方法是检查所有可用的插件,然后-根据预定义的加载顺序-检查插件A和B是否可用,以便可以加载当前的插件C(取决于两者)。 但是,这意味着我需要将依赖项添加到核心应用程序。 我确实相信这是每个​​插件都需要自己(或多或少)照顾的事情。

似乎没有直接的方法可以做到这一点。 到目前为止,我发现的唯一方法是通过每个插件附带的JSON文件。 在那里可以输入一个密钥-我们称之为“ deps”-并通过QPluginLoader::metaData()调用元数据。 此函数返回一个QJsonObject (JSON文档的根。然后可以找到“ deps”并获取其内容(例如,当前插件所依赖的其他插件的名称列表)。下一个可以检查是否提到了该插件。存在和加载依赖项,依此类推。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM