c++ - 如何管理自定义 Qt 插件的依赖项(不适用于 Qt Creator)?

标签 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 .除此之外,其他插件还为依赖于这些插件的插件提供部分功能。

为了继续这个例子,我们有 Git , SVN 等等插件都依赖于VcsBase因为一切都取决于此插件提供的功能。

我可以研究这两个变量,但我觉得应该有比仅仅筛选 Qt Creator 代码更好的方法(不太适合初学者)。我检查了 QPluginLoader但唯一与依赖相关的是平台无关,这不是我要找的。

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

最佳答案

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

关于c++ - 如何管理自定义 Qt 插件的依赖项(不适用于 Qt Creator)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48485690/

相关文章:

c++ - 如何在 QRunnable 中休眠?

c++ - cv::imread() 导致内存损坏

c - __declspec(dllimport) 和外部 (OBS)

android - 如何更改qt android应用程序的默认应用程序图像

C++ 在 GCC 上使用删除的函数,但在 MSVC 上不使用

linux - 解释段错误消息

plugins - 如何在 addComponent 函数 TailwindCSS 中添加深色模式样式

java - 安装插件时 ADT 恢复为标准 Eclipse

c++ - 使用 std::set 替代 BOOST_FOREACH?

c++ - 根据构造函数中的参数创建内部对象?