Yayin Story Studio logo Yayin Story Studio 项目文档
回到主页 用户手册

Visindigo::General::PluginManager Class

class Visindigo::General::PluginManager

此类为Visindigo提供插件管理器. 详情...

头文件: #include <General/PluginManager.h>
自以下版本: Visindigo 0.13.0

公开成员函数

(自 Visindigo 0.13.0 引入) ~PluginManager()
(自 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.13.0 引入) Visindigo::General::Plugin *getPluginByID(const QString &id) const
(自 Visindigo 0.13.0 引入) 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 loadDeactivatePluginList()
(自 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.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在恰当时机自动调用的, 一般不需要手动调用这些函数,除非你非常清楚你在做什么。

如果你不想使用Visindigo::General::VIApplication,但又需要插件管理功能, 你可以手动调用这些函数,但请确保调用顺序正确:

成员函数文档

[noexcept, since Visindigo 0.13.0] PluginManager::~PluginManager()

析构PluginManager对象,卸载所有插件。一般来说,没有任何情况需要手动析构此对象。PluginManager应该与使用它的应用程序有一致的生命周期。

这个function 从 Visindigo 0.13.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.13.0] Visindigo::General::Plugin *PluginManager::getPluginByID(const QString &id) const

根据 id 获取插件对象指针。如果插件ID不存在或未被正确加载,则返回nullptr。

这个function 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.13.0] Visindigo::General::Plugin *PluginManager::getPluginByName(const QString &name) const

根据插件名称 name 获取插件对象指针。如果插件名称不存在或未被正确加载,则返回nullptr。

这个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 开始支持。

[since Visindigo 0.13.0] void PluginManager::loadDeactivatePluginList()

从配置文件中加载被设置为未激活状态的插件ID列表。这个函数会在用户通过 VIApplication::setMainPlugin()设置主插件时被自动调用, 以确保在加载插件之前就正确地识别出哪些插件被设置为未激活状态。

这个配置会自动寄生到主插件的配置文件中,路径为"Plugins.Deactivated", 因此你也可以直接编辑配置文件来修改这个列表。

这个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::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 开始支持。

相关的非成员内容

[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.