zoukankan      html  css  js  c++  java
  • qt creator源码全方面分析(2-10-5)

    The Plugin Manager, the Object Pool, and Registered Objects

    通常,插件不需要直接访问插件管理器。 交互主要间接的通过ExtensionSystem::IPlugin接口。 在某些情况下,则必须使用插件管理器API。 插件需要访问插件管理器的对象池,以扩展Qt Creator的某些方面,例如将页面添加到选项对话框。 他们还可以利用对象池为其他插件提供扩展点。

    插件管理器

    插件管理器处理所有细节,包括查找插件,读取它们的描述文件,解决插件依赖性,以正确的顺序加载和初始化所有插件,以及传递命令行参数给插件。

    另外,插件管理器管理对象池,可以根据不同的条件在其中注册和检索对象。

    插件与插件管理器的大多数交互应通过ExtensionSystem::IPlugin接口完成,但是下表总结了一些对插件有用的函数和信号。 有关完整列表,请参见ExtensionSystem::PluginManager参考文档。

    函数 描述
    instance() 返回插件管理器单例,例如,用于连接信号。
    addObject() 在对象池中注册对象。 也可以通过ExtensionSystem::IPlugin::addObject()。
    removeObject() 从对象池中移除对象。 也可以通过ExtensionSystem::IPlugin::removeObject()。
    allObjects() 返回对象池中注册的所有对象的未过滤列表。
    getObject() 返回注册在对象池中的类型为T的对象。 这在向Aggregation致敬。
    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()信号。

    对象池的一个常见用例是,一个插件(或应用程序)为其他插件提供了扩展点,扩展点为类,在其他插件中实现,并添加到对象池中,然后供提供扩展点的插件检索。也可以使用对象池来提供对对象的访问,而无需实际链接到提供的插件库。


    原创造福大家,共享改变世界

    献出一片爱心,温暖作者心灵


  • 相关阅读:
    HBA登录验证
    html转pdf
    html转pdf
    html转word
    python生成html
    python生成pdf
    Word另存为不同的格式
    WORD转HTML-python第三方包Mammoth(官方文档翻译)
    深入浅谈,CPU设计原理
    CPU,寄存器,缓存,RAM,ROM的作用和他们之间的联系
  • 原文地址:https://www.cnblogs.com/codeForFamily/p/qt-creator-ide-source-learn-2-10-5.html
Copyright © 2011-2022 走看看