插件管理器、对象池和注册对象

通常,插件无需直接访问插件管理器。它们主要通过 ExtensionSystem::IPlugin 接口间接与之交互。但有时使用插件管理器 API 是必要的。插件需要访问插件管理器的对象池以扩展 Qt Creator 的某些方面,例如向选项对话框添加页面。它们还可以利用对象池为其他插件提供扩展点。

插件管理器

插件管理器处理与查找插件、读取其说明文件、解析插件依赖关系、以正确顺序加载和初始化所有插件以及传递命令行参数相关的所有细节。

此外,插件管理器管理一个 对象池,其中可以根据不同的标准注册和检索对象。

插件应通过 ExtensionSystem::IPlugin 接口与插件管理器进行交互,但以下表格总结了可用于插件的一些函数和信号。有关完整列表,请参阅 ExtensionSystem::PluginManager 引用文档。

函数说明
instance()返回单例插件管理器实例,例如用于连接信号。
addObject()将对象注册到对象池中。也通过 ExtensionSystem::IPlugin::addObject() 可用。
removeObject()从对象池中注销对象。也通过 ExtensionSystem::IPlugin::removeObject() 可用。
allObjects()返回对象池中注册的所有对象的未过滤列表。
getObject<T>()返回对象池中已注册的 T 类型的单个对象。这尊重 聚合
getObjectByName(const QString &name)返回对象池中具有给定对象名的单个对象。
信号说明
objectAdded(QObject *object)在对象注册到对象池后发出。
aboutToRemoveObject(QObject *object)在对象从对象池中注销之前发出。
initializationDone()在插件运行且所有延迟初始化完成后发出。

对象池和注册对象

插件可以注册对象到一个由插件管理器管理的公共 中。池中的对象必须派生自 QObject,没有其他要求。

可以通过 getObject() 函数从对象池中检索指定类型的所有对象。它知道 Aggregation::Aggregate,并使用 Aggregation::query() 函数而不是 qobject_cast 来确定匹配的对象。

可以通过 allObjects() 函数检索对象池中注册的所有对象的未过滤列表。

也可以使用 getObjectByName() 函数通过特定的对象名称检索一个对象(见 QObject::objectName "())。

每当对象池的状态发生改变时,插件管理器会发出相应的 objectAdded()aboutToRemoveObject() 信号。

对象池的一个常见用法是,插件(或应用程序)为其他插件提供了一个 扩展点,这是一个可以实现和添加到对象池中以供提供插件检索的类。也有可能使用对象池来提供对对象的访问,而不需要实际链接到提供插件的库。

©2024 Qt 公司有限公司。此处包含的文档贡献是各自所有者的版权。此处提供的文档是根据自由软件基金会公布的版本 1.3 的 GNU自由文档许可证 许可的。Qt 和相应的徽标是芬兰及全球其他地区的 Qt 公司的商标。所有其他商标均为各自所有者的财产。