Visindigo::General::PluginManager Class
class Visindigo::General::PluginManager此类为Visindigo提供插件管理器. 详情...
| 头文件: | #include <General/PluginManager.h> |
| 自以下版本: | Visindigo 0.13.0 |
- 所有成员列表(包含继承成员)
- PluginManager 是该集合的一部分:VIPlugin插件系统子模块.
公开成员函数
(自 Visindigo 0.13.0 引入) | ~PluginManager() |
(自 Visindigo 0.17.0 引入) void | addPluginEntryPoint(Plugin *(*)() entryPoint, const QString &metaJsonFilePath, const QString &pluginBinaryFolderPath = "") |
(自 Visindigo 0.17.0 引入) void | addPluginLoadPath(const QString &libFilePath, const QString &metaJsonFilePath, const QString &pluginBinaryFolderPath = "") |
(自 Visindigo 0.13.0 引入) void | applicationInitAllPlugin() |
(自 Visindigo 0.13.0 引入) void | disableAllPlugin() |
(自 Visindigo 0.13.0 引入) void | enableAllPlugin() |
(自 Visindigo 0.13.0 引入) QMap<QString, Visindigo::General::PluginManager::LoadPluginResult> | getAllPluginLoadResults() const |
(自 Visindigo 0.13.0 引入) QStringList | getAllPluginModuleTypeID() const |
(自 Visindigo 0.13.0 引入) QStringList | getAllPluginTypeID() const |
(自 Visindigo 0.13.0 引入) QStringList | getDeactivatedPluginIDList() const |
(自 Visindigo 0.13.0 引入) qint32 | getEnabledPluginCount() const |
(自 Visindigo 0.15.1 引入) QList<Visindigo::General::Plugin *> | getEnabledPlugins() const |
(自 Visindigo 0.13.0 引入) qint32 | getLoadedPluginCount() const |
(自 Visindigo 0.13.0 引入) QList<Visindigo::General::Plugin *> | getLoadedPlugins() const |
(自 Visindigo 0.16.0 引入) QDir | getPluginBinaryFolder(const QString &id) const |
(自 Visindigo 0.13.0 引入) Visindigo::General::Plugin * | getPluginByID(const QString &id) const |
(自 Visindigo 0.13.0 引入) QList<Visindigo::General::Plugin *> | getPluginByName(const QString &name) const |
(自 Visindigo 0.13.0 引入) Visindigo::General::PluginManager::LoadPluginResult | getPluginLoadResultByID(const QString &id) const |
(自 Visindigo 0.13.0 引入) QString | getPluginModuleTypeDescription(const QString &typeID) const |
(自 Visindigo 0.13.0 引入) QString | getPluginModuleTypeName(const QString &typeID) const |
(自 Visindigo 0.13.0 引入) QString | getPluginTypeDescription(const QString &typeID) const |
(自 Visindigo 0.13.0 引入) QString | getPluginTypeName(const QString &typeID) const |
(自 Visindigo 0.13.0 引入) bool | isPluginDeactivate(const QString &id) const |
(自 Visindigo 0.13.0 引入) bool | isPluginEnable(Visindigo::General::Plugin *plugin) const |
(自 Visindigo 0.13.0 引入) bool | isPluginEnable(const QString &id) const |
(自 Visindigo 0.13.0 引入) void | loadAllPlugin() |
(自 Visindigo 0.13.0 引入) void | setDeactivatePluginList(const QStringList &deactivatedList) |
(自 Visindigo 0.13.0 引入) void | setPluginDeactivate(const QString &id, bool deactivate) |
(自 Visindigo 0.13.0 引入) void | setPluginModuleTypeDescription(const QString &typeID, const QString &typeName, const QString &description) |
(自 Visindigo 0.13.0 引入) void | setPluginTypeDescription(const QString &typeID, const QString &typeName, const QString &description) |
(自 Visindigo 0.13.0 引入) void | testAllPlugin() |
(自 Visindigo 0.17.0 引入) void | unloadAllPlugin() |
信号
(自 Visindigo 0.13.0 引入) void | pluginEnabled(Visindigo::General::Plugin *plugin) |
(自 Visindigo 0.13.0 引入) void | pluginLoaded(Visindigo::General::Plugin *plugin) |
静态公开成员
(自 Visindigo 0.13.0 引入) Visindigo::General::PluginManager * | getInstance() |
相关的非成员内容
(自 Visindigo 0.13.0 引入) | PackageManager |
宏
(自 Visindigo 0.13.0 引入) | VISPM |
详细说明
PluginManager负责加载和管理插件。
此类中有几个函数是由Visindigo::General::VIApplication在恰当时机自动调用的, 一般不需要手动调用这些函数,除非你非常清楚你在做什么。
成员函数文档
[noexcept, since Visindigo 0.13.0] PluginManager::~PluginManager()
析构PluginManager对象,卸载所有插件。一般来说,没有任何情况需要手动析构此对象。PluginManager应该与使用它的应用程序有一致的生命周期。
这个function 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.17.0] void PluginManager::addPluginEntryPoint(Plugin *(*)() entryPoint, const QString &metaJsonFilePath, const QString &pluginBinaryFolderPath = "")
entryPoint 插件入口函数指针(等价于磁盘插件经 resolve("VisindigoPluginMain") 得到的入口)。 用于插件库已随进程加载(如 Android 随 APK lib/<abi> 由主程序 DT_NEEDED 载入)、无法再 dlopen 的场景。 metaJsonFilePath 该插件的元数据 json(含 ID/Dependencies;可为文件路径或 qrc ":/…")。 pluginBinaryFolderPath 插件二进制文件夹路径(可选,若为空则使用 程序文件 所在目录)
手动指定一个插件入口函数指针和其元数据json文件的路径,供PluginManager在loadAllPlugin()时加载。此函数必须在loadAllPlugin()之前调用,否则会被忽略。
这个function 从 Visindigo 0.17.0 开始支持。
[since Visindigo 0.17.0] void PluginManager::addPluginLoadPath(const QString &libFilePath, const QString &metaJsonFilePath, const QString &pluginBinaryFolderPath = "")
libFilePath 插件库文件(绝对路径)。 metaJsonFilePath 该插件的元数据 json(含 "ID"、"Dependencies";可为文件路径或 qrc ":/…")。 pluginBinaryFolderPath 插件二进制文件夹路径(可选,若为空则使用 libFilePath 所在目录)。
手动指定一个插件库文件和其元数据json文件的路径,供PluginManager在loadAllPlugin()时加载。此函数必须在loadAllPlugin()之前调用,否则会被忽略。
如果这个路径最终会落到插件将自动扫描的目录内,则对此函数的调用无效。请参见VIApplication::EnvKey::PluginFolderPath。
这个function 从 Visindigo 0.17.0 开始支持。
[since Visindigo 0.13.0] void PluginManager::applicationInitAllPlugin()
在所有插件都被启用后,调用所有插件的Visindigo::General::Plugin::onApplicationInit()函数,进行应用程序初始化工作。
Warning: 一般不手动调用此函数,其调用由Visindigo::General::VIApplication在恰当时机自动完成。 如果需要手动调用,请安排在enableAllPlugin()之后调用此函数。
这个function 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.13.0] void PluginManager::disableAllPlugin()
禁用所有已启用的插件。请在调用enableAllPlugin()之后调用此函数。
Warning: 一般不手动调用此函数,其调用由Visindigo::General::VIApplication在恰当时机自动完成。 如果在没有启用插件的情况下调用此函数,则不会有任何效果。
这个function 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.13.0] void PluginManager::enableAllPlugin()
启用所有已加载但未启用的插件。
Warning: 一般不手动调用此函数,其调用由Visindigo::General::VIApplication在恰当时机自动完成。 如果需要手动调用,请安排在loadAllPlugin()之后调用此函数。
这个function 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.13.0] QMap<QString, Visindigo::General::PluginManager::LoadPluginResult> PluginManager::getAllPluginLoadResults() const
return 所有插件的加载结果映射。这个映射包含所有已加载插件的ID和对应的加载结果。
这个function 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.13.0] QStringList PluginManager::getAllPluginModuleTypeID() const
return 所有已注册的插件模块类型ID列表。这个列表包含所有被注册的插件模块类型ID字符串。
这个function 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.13.0] QStringList PluginManager::getAllPluginTypeID() const
return 所有已注册的插件类型ID列表。这个列表包含所有被注册的插件类型ID字符串。
这个function 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.13.0] QStringList PluginManager::getDeactivatedPluginIDList() const
return 所有被设置为禁用状态的插件ID列表。
请注意,这只包括被手动设置为禁用状态的插件ID,而不包括那些因为依赖关系而被自动禁用的插件ID。
这个function 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.13.0] qint32 PluginManager::getEnabledPluginCount() const
return 已启用的插件数量。这是被启用并可以使用的插件对象的数量。
这个function 从 Visindigo 0.13.0 开始支持。
另请参阅 getLoadedPluginCount().
[since Visindigo 0.15.1] QList<Visindigo::General::Plugin *> PluginManager::getEnabledPlugins() const
return 已启用的插件对象列表。这个列表包含所有被启用并可以使用的插件对象指针。
这个function 从 Visindigo 0.15.1 开始支持。
[static, since Visindigo 0.13.0] Visindigo::General::PluginManager *PluginManager::getInstance()
return PluginManager单例对象指针。单例不存在时自动创建,是获得PluginManager对象的唯一途径。
这个function 从 Visindigo 0.13.0 开始支持。
另请参阅 VISPM.
[since Visindigo 0.13.0] qint32 PluginManager::getLoadedPluginCount() const
return 已加载的插件数量。这是被正确识别且加载到内存的插件动态链接库的数量。
根据插件加载的成功情况,插件在内存中的关系遵循如下规律:
- 1. 如果插件的metajson未被正确识别,则根本不会触发对动态链接库的加载尝试。
- 2. 如果在加载插件的动态链接库时,插件主函数返回的插件实例为nullptr, 或ID与metajson不符,则立即析构该插件实例(如果可以),并立即卸载该动态链接库。
- 3. 在启用插件时,如果发生异常,则立即调用该插件的禁用函数,并保持该插件处于未启用状态,但插件仍然保留在内存中。
这个function 从 Visindigo 0.13.0 开始支持。
另请参阅 getEnabledPluginCount().
[since Visindigo 0.13.0] QList<Visindigo::General::Plugin *> PluginManager::getLoadedPlugins() const
return 已加载的插件对象列表。这个列表包含所有被正确识别并加载到内存中的插件对象指针,无论它们是否被启用。
这个function 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.16.0] QDir PluginManager::getPluginBinaryFolder(const QString &id) const
根据 id 获取插件二进制文件(.vpl)所在的目录。
这个目录是插件动态库实际存放的目录,与插件的配置目录(getPluginFolder())不同。 如果插件ID不存在或未被加载,返回空的QDir。
这个function 从 Visindigo 0.16.0 开始支持。
另请参阅 Plugin::getPluginBinaryFolder().
[since Visindigo 0.13.0] Visindigo::General::Plugin *PluginManager::getPluginByID(const QString &id) const
根据 id 获取插件对象指针。如果插件ID不存在或未被正确加载,则返回nullptr。
这个function 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.13.0] QList<Visindigo::General::Plugin *> PluginManager::getPluginByName(const QString &name) const
根据插件名称 name 获取插件对象指针列表,其中包括全部具有此名称的插件对象指针。对象必须已经被加载到内存中,无论它们是否被启用。
这个function 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.13.0] Visindigo::General::PluginManager::LoadPluginResult PluginManager::getPluginLoadResultByID(const QString &id) const
根据 id 获取插件的加载结果。这个结果反映了插件在加载阶段的状态,包括是否成功加载、是否被禁用、是否缺少依赖等。
如果插件ID不存在,则返回LoadPluginResult::Unknown。
这个function 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.13.0] QString PluginManager::getPluginModuleTypeDescription(const QString &typeID) const
return 根据插件模块类型ID typeID 获取的插件模块类型描述。如果类型ID不存在,则返回空字符串。
这个function 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.13.0] QString PluginManager::getPluginModuleTypeName(const QString &typeID) const
return 根据插件模块类型ID typeID 获取的插件模块类型名称。如果类型ID不存在,则返回空字符串。
这个function 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.13.0] QString PluginManager::getPluginTypeDescription(const QString &typeID) const
return 根据插件类型ID typeID 获取的插件类型描述。如果类型ID不存在,则返回空字符串。
这个function 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.13.0] QString PluginManager::getPluginTypeName(const QString &typeID) const
return 根据插件类型ID typeID 获取的插件类型名称。如果类型ID不存在,则返回空字符串。
这个function 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.13.0] bool PluginManager::isPluginDeactivate(const QString &id) const
return ID为 id 的插件是否被手动设置为禁用状态。
请注意,和禁用状态有关的几个函数都有以下要点:
- 1. 激活状态是个纯配置的项目,和插件是否实际被加载和启用没有关系。 即使在全部插件都没加载的阶段,也可以设置某个插件的激活状态。它不依赖插件实例,只从ID判断。
- 2. 一个插件被配置为禁用状态后,依赖它的所有插件都会被连带设置为禁用状态。 但连带禁用的插件不会出现在禁用列表中,这个列表永远只含有被手动指定为禁用的插件ID。
如果需要知道所有被禁用(无论是手动禁用还是连带禁用)的插件ID, 可以使用getPluginLoadResultByID()函数来判断插件的加载结果是否为Deactivated。
这个function 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.13.0] bool PluginManager::isPluginEnable(Visindigo::General::Plugin *plugin) const
return plugin 插件是否被启用。
这个function 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.13.0] bool PluginManager::isPluginEnable(const QString &id) const
return ID为 id 的插件是否被启用。
这个function 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.13.0] void PluginManager::loadAllPlugin()
扫描并加载插件到内存里,但不启用它们。
此函数会扫描Visindigo::General::VIApplication::EnvKey::PluginFolderPath 指定的目录下的所有插件,并根据插件的依赖关系决定加载顺序。
Warning: 一般不手动调用此函数,其调用由Visindigo::General::VIApplication在恰当时机自动完成。
Note: 这个函数不能被多次调用,重复调用会被忽略。
这个function 从 Visindigo 0.13.0 开始支持。
[signal, since Visindigo 0.13.0] void PluginManager::pluginEnabled(Visindigo::General::Plugin *plugin)
plugin 已启用的插件对象指针。
当插件被成功启用时发出此信号。
这个function 从 Visindigo 0.13.0 开始支持。
[signal, since Visindigo 0.13.0] void PluginManager::pluginLoaded(Visindigo::General::Plugin *plugin)
plugin 已加载的插件对象指针。
当插件被成功加载时发出此信号。
这个function 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.13.0] void PluginManager::setDeactivatePluginList(const QStringList &deactivatedList)
deactivatedList 被设置为禁用状态的插件ID列表。 设置禁用状态的插件ID列表。这个列表只包含被手动设置为禁用状态的插件ID,而不包括那些因为依赖关系而被自动禁用的插件ID。
这个设置会自动进入主插件配置文件的"Plugins.Deactivated"项,以确保这个设置在下次启动时仍然有效。
这个function 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.13.0] void PluginManager::setPluginDeactivate(const QString &id, bool deactivate)
设置ID为 id 的插件的 deactivate 状态,true为禁用,false为启用。
被设置为false状态的插件将在加载动态链接库到内存这一步时被跳过,因此也不会启用。 请注意,如果这插件是其他插件的依赖项,那么依赖它的所有插件都会被连带禁用。
只要调用这个函数,它就会同步修改主插件配置文件中"Plugins.Deactivated"项的内容,以确保这个设置在下次启动时仍然有效。 被连带禁用的插件不会出现在这个配置项中,这个配置项永远只包含被手动设置为禁用状态的插件ID。
这个function 从 Visindigo 0.13.0 开始支持。
另请参阅 isPluginDeactivate().
[since Visindigo 0.13.0] void PluginManager::setPluginModuleTypeDescription(const QString &typeID, const QString &typeName, const QString &description)
typeID 插件模块类型ID,必须是唯一的字符串标识符。 typeName 插件模块类型名称,用于在用户界面中显示。 description 插件模块类型描述,用于在用户界面中显示详细信息。
为插件模块类型ID typeID 设置插件模块类型名称和描述。这些信息可以在用户界面中显示,以帮助用户识别和理解不同类型的插件模块。
这个function 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.13.0] void PluginManager::setPluginTypeDescription(const QString &typeID, const QString &typeName, const QString &description)
typeID 插件类型ID,必须是唯一的字符串标识符。 typeName 插件类型名称,用于在用户界面中显示。 description 插件类型描述,用于在用户界面中显示详细信息。
为插件类型ID typeID 设置插件类型名称和描述。这些信息可以在用户界面中显示,以帮助用户识别和理解不同类型的插件。
这个function 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.13.0] void PluginManager::testAllPlugin()
测试所有已加载的插件。这调用所有插件的Visindigo::General::Plugin::onTest()函数。
如果插件未启用测试,则跳过该插件的测试。
Warning: 一般不手动调用此函数,其调用由Visindigo::General::VIApplication在恰当时机自动完成。 如果需要手动调用,请安排在applicationInitAllPlugin()之后调用此函数。
这个function 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.17.0] void PluginManager::unloadAllPlugin()
卸载所有插件,释放所有插件占用的资源。请在调用disableAllPlugin()之后调用此函数。
这个function 从 Visindigo 0.17.0 开始支持。
相关的非成员内容
[alias, since Visindigo 0.13.0] PackageManager
作为Visindigo::General::PluginManager类的别名,方便用户将其称为“应用程序包管理器”。
这个typedef 从 Visindigo 0.13.0 开始支持。
宏文档
[since Visindigo 0.13.0] VISPM
等同于 Visindigo::General::PluginManager::getInstance(),用于快速访问插件管理器单例对象。
This macro was introduced in Visindigo 0.13.0.