class QPluginLoader#

类的 QPluginLoader 在运行时加载一个插件。 更多信息...

Inheritance diagram of PySide6.QtCore.QPluginLoader

摘要#

属性#

  • fileName - 插件文件名

  • loadHints - 给 load() 函数提供一些如何行为的提示

方法#

静态函数#

本文档可能包含从C++自动翻译到Python的片段。我们始终欢迎对片段翻译的贡献。如果您在翻译中发现问题,您也可以通过在https:/bugreports.qt.io/projects/PYSIDE上创建工单来告诉我们

详细描述#

QPluginLoader 提供对Qt插件的访问。Qt插件存储在共享库(DLL文件)中,并比使用 QLibrary 访问的共享库有这些优势

  • QPluginLoader 检查插件是否链接到与应用程序相同的Qt版本。

  • QPluginLoader 提供对根组件对象的直接访问( instance() ),而不是强迫您手动解析C函数。

QPluginLoader 的一个实例在单个共享库文件上操作,我们称之为插件。它以平台无关的方式提供对插件功能访问。要指定加载哪个插件,可以通过构造函数传递文件名或使用 setFileName() 设置它。

最重要的功能包括动态加载插件文件的load(),检查加载是否成功的isLoaded(),以及访问插件根组件的instance()。如果插件尚未加载,instance()函数会自动尝试加载插件。可以使用多个QPluginLoader实例来访问同一个物理插件。

一旦加载,插件会一直保留在内存中,直到所有QPluginLoader实例被卸载,或者应用程序终止。您可以使用unload()尝试卸载插件,但如果其他实例正在使用同一库,调用将失败,并且卸载只在所有实例都调用unload()后才发生。在卸载发生之前,根组件也将被删除。

有关如何通过插件使您的应用程序可扩展的更多信息,请参阅如何创建Qt插件。

请注意,如果您的应用程序是静态链接到Qt的,则不能使用QPluginLoader。在这种情况下,您还需要将插件静态链接。如果需要在一个静态链接的应用程序中加载动态库,则可以使用QLibrary

另请参阅

QLibrary

当使用from __feature__ import true_property时,可以直接使用属性;否则,可以通过访问函数使用属性。

propertyfileNameᅟ: str#

该属性保存插件的文件名。

我们建议在文件名中省略文件的扩展名,因为QPluginLoader将自动查找具有适当后缀的文件(参见isLibrary())。

在加载插件时,QPluginLoader 会搜索由 libraryPaths() 指定的所有插件位置,除非文件名包含绝对路径。成功加载插件后,fileName() 返回插件的完全限定文件名,包括如果构造函数中给出或通过 setFileName() 传递的完整路径。

如果文件名不存在,它不会被设置。因此,此属性将包含一个空字符串。

默认情况下,此属性包含一个空字符串。

另请参阅

load()

访问函数
属性 loadHints: QLibrary.LoadHint 的组合#

此属性为 load() 函数提供了一些行为提示。

您可以提供有关插件中符号解析的提示。默认情况下,自 Qt 5.7 开始,设置了 PreventUnloadHint

请参阅 loadHints 的文档,以详细了解此属性如何工作。

另请参阅

loadHints

访问函数
__init__([parent=None])#
参数:

parentQObject

使用给定的 parent 构造插件加载器。

__init__(fileName[, parent=None])
参数:
  • fileName – 字符串

  • parentQObject

使用给定的 parent 构造插件加载器,它将加载由 fileName 指定的插件。

为了加载,文件的后缀必须是平台支持的加载库的有效后缀,例如 Unix 上的 .so,macOS 和 iOS 上的 .dylib,以及 Windows 上的 .dll。可以通过 isLibrary() 验证后缀。

另请参阅

setFileName()

errorString()#
返回类型:

字符串

返回最后一次发生的错误的描述文本字符串。

fileName()#
返回类型:

字符串

另请参阅

setFileName()

属性 fileName 的获取器。

instance()#
返回类型:

QObject

返回插件的主组件对象。如果需要,会加载插件。如果插件无法加载或无法实例化根组件对象,则函数返回 None

如果根组件对象已被销毁,调用此函数将创建一个新实例。

此函数返回的根组件,不会在销毁 QPluginLoader 时被删除。如果您想确保根组件被删除,应在不再需要访问核心组件后立即调用 unload()。当库最终被卸载时,根组件将自动被删除。

组件对象是一个 QObject。使用 qobject_cast() 访问感兴趣的接口。

另请参阅

load()

isLoaded()#
返回类型:

bool

如果插件已加载,返回 true;否则返回 false

另请参阅

load()

load()#
返回类型:

bool

加载插件并返回 true(表示插件加载成功)或 false。由于 instance() 在解析任何符号之前总会在调用此函数,因此通常不需要显式调用它。在某些情况下,您可能希望插件预先加载,在这种情况下,可使用此函数。

另请参阅

unload()

loadHints()#
返回类型:

LoadHint 的组合

另请参阅

setLoadHints()

属性 loadHints 的获取器。

metaData()#
返回类型:

QJsonObject

返回此插件的元数据。元数据是使用 Q_PLUGIN_METADATA() 宏在编译插件时指定的 json 格式的数据。

The meta data can be queried in a fast and inexpensive way without actually loading the plugin. This makes it possible to e.g. store capabilities of the plugin in there, and make the decision whether to load the plugin dependent on this meta data.

setFileName(fileName)#
参数:

fileName – 字符串

另请参阅

fileName()

设置属性 fileName 的值。

setLoadHints(loadHints)#
参数:

loadHints - 结合了 LoadHint

另请参阅

loadHints()

设置属性 loadHints 的值。

static staticInstances()#
返回类型:

对象 QObject 的列表

返回插件加载器持有的静态插件实例(根组件)的列表。

另请参阅

staticPlugins()

unload()#
返回类型:

bool

卸载插件并返回 true 如果插件可以被卸载;否则返回 false

这会在应用程序终止时自动发生,因此通常不需要调用此函数。

如果其他 QPluginLoader 实例正在使用相同的插件,调用将失败,只有当每个实例都调用 unload() 时才进行卸载。

不要尝试删除根组件。相反,依赖于 unload() 会在需要时自动删除它。

另请参阅

instance() load()