IPlugin 类

class ExtensionSystem::IPlugin

IPlugin 类是一个抽象基类,每个插件必须实现一次。更多...

头文件 #include <extensionsystem/iplugin.h>
继承 QObject

公共类型

枚举ShutdownFlag { SynchronousShutdown, AsynchronousShutdown }

公共函数

virtual ExtensionSystem::IPlugin::ShutdownFlagaboutToShutdown()
voidaddTestCreator(const ExtensionSystem::TestCreator &creator)
virtual booldelayedInitialize()
virtual voidextensionsInitialized()
virtual boolinitialize(const QStringList &arguments, QString *errorString)
virtual QObject *remoteCommand(const QStringList &options, const QString &workingDirectory, const QStringList &arguments)

信号

保护函数

virtual voidinitialize()

详细描述

插件需要提供元数据,除了实际的插件库,这样插件管理器才能找到插件、解析其依赖关系并加载它。有关更多信息,请参阅插件元数据

插件必须提供一个 IPlugin 类的实现,位于与它们元数据中给出的 name 属性匹配的库中。IPlugin 实现必须导出,并使用具有 "org.qt-project.Qt.QtCreatorPlugin" IID 的 Q_PLUGIN_METADATA 宏,使 Qt 的插件系统知晓。插件生命周期

更多详细信息,请参阅插件生命周期

成员类型文档

enum IPlugin::ShutdownFlag

此枚举类型表示插件是否同步或异步关闭。

常量描述
ExtensionSystem::IPlugin::SynchronousShutdown0插件同步关闭。
ExtensionSystem::IPlugin::AsynchronousShutdown1在关闭前,插件需要执行异步操作。

成员函数文档

[虚拟] ExtensionSystem::IPlugin::ShutdownFlag IPlugin::aboutToShutdown()

在关闭序列期间被调用,顺序与初始化时相同,在插件被删除的逆序中删除。

此函数应用于与其他插件断开连接,隐藏所有用户界面,并在一般情况下优化关闭操作。如果插件需要延迟实际关闭一段时间,例如需要等待外部进程完成以便进行干净的关闭,则插件可以从该函数返回 IPlugin::AsynchronousShutdown。这将保持主事件循环在 aboutToShutdown() 序列完成后继续运行,直到所有请求异步关闭的插件都已发送 asynchronousShutdownFinished() 信号。

此函数的默认实现不执行任何操作,并返回 IPlugin::SynchronousShutdown

如果插件需要在关闭前执行异步操作,则返回 IPlugin::AsynchronousShutdown

另请参阅 asynchronousShutdownFinished

void IPlugin::addTestCreator(const ExtensionSystem::TestCreator &creator)

注册一个函数对象,该对象使用 creator 创建一个测试对象。

创建的对象打算传递给 QTest::qExec

如果用户以 -test PluginName-test all 启动 Qt Creator,则将调用函数对象。

创建的对象的所有权将转移给插件。

[信号] void IPlugin::asynchronousShutdownFinished()

在异步关闭已准备好启动关闭序列后,由插件实现发送。

另请参阅 aboutToShutdown

[虚拟] bool IPlugin::delayedInitialize()

在所有插件的 extensionsInitialized() 函数调用之后,以及依赖此插件的插件的 delayedInitialize() 函数调用之后调用。

插件的 delayedInitialize() 函数将在应用程序已经启动后调用,与启动有少数毫秒的延迟,并在单个 delayedInitialize() 函数调用之间。为了避免不必要的延迟,如果插件确实实现了该函数,则应从该函数返回 true,以表示下一个插件的 delayedInitialize() 调用应延迟几毫秒,以便输入和绘制事件有机会被处理。

如果插件需要执行非平凡的设置,但不需要在启动时立即执行,但在一段时间内应该执行,则可以使用此函数。这可以在非常小的努力下大幅降低插件或应用程序的启动时间。

另请参阅 initialize() 和 extensionsInitialized

[虚拟] void IPlugin::extensionsInitialized()

在调用 initialize() 函数之后,以及调用依赖于此插件的插件的 initialize() 和 extensionsInitialized() 函数之后调用。

在此函数中,插件可以假设依赖于此插件的插件完全运行动态。这是一个在全局对象池中查找由弱依赖插件提供对象的好地方。

另请参阅 initialize() 和 delayedInitialize

[虚拟] bool IPlugin::initialize(const QStringList &arguments, QString *errorString)

在插件加载和 IPlugin 实例创建后被调用。

当此插件的初始化函数被调用时,依赖于此插件的插件的初始化函数将被调用。插件应在该函数中初始化其内部状态。

返回初始化是否成功。如果不成功,应将 errorString 设置为一个用户可读的消息,描述失败的原因。

另请参阅extensionsInitialized() 和 delayedInitialize

[虚拟受保护] void IPlugin::initialize()

此函数是对 initialize(const QStringList &arguments, QString *errorString) 的默认实现,可以在未使用参数和没有错误需要报告的情况下,覆盖完整的参数版本。

另请参阅extensionsInitialized() 和 delayedInitialize

[虚拟] QObject *IPlugin::remoteCommand(const QStringList &options, const QString &workingDirectory, const QStringList &arguments)

当带有 -client 参数执行 Qt Creator,而另一个 Qt Creator 实例正在运行时,该插件的功能将在运行实例中被调用。

workingDirectory 参数指定调用进程的工作目录。例如,如果您在一个目录中,并执行 qtcreator -client file.cpp,调用进程的工作目录将被传递给运行实例,并将 file.cpp 转换为从该目录开始的绝对路径。

特定于插件的自定义参数在 options 中传递,而其余参数在 arguments 中传递。

如果使用了 -block,则返回一个 QObject,阻止命令直到它被销毁。

©2024 The Qt Company Ltd. 本文档的供款是该文档所有者的版权。本处提供的文档是根据自由软件开发基金会发布的 GNU 自由文档许可证版本 1.3 的条款授权使用的。Qt 和相应的徽标是芬兰的 The Qt Company Ltd 以及全球的商标。所有其他商标均为各自所有者的财产。