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

时间:2018-01-28 11:11:45

标签: c++ qt plugins

我最近开始在Qt中使用插件,只是为了好玩。我仍然无法弄清楚的一件事是如何定义和管理插件对其他插件(和库)的依赖性。我正在使用Plug&Paint example

当谈到 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(取决于两者)。但是,这意味着我需要将依赖项添加到核心应用程序中。我相信这是每个​​插件需要自己处理的(或多或少)。

1 个答案:

答案 0 :(得分:0)

似乎没有直接的方法可以做到这一点。到目前为止,我找到的唯一方法是通过每个插件附带的JSON文件。有一个人可以输入密钥 - 让我们称之为&#34; deps&#34; - 并通过QPluginLoader::metaData()调用元数据。此函数返回QJsonObject(JSON文档的根目录。然后可以找到&#34; deps&#34;并获取内容(例如,其他插件的名称列表,当前的依赖于接下来可以检查所提到的依赖关系是否存在和加载等等。