PySide6.QtCore.QPluginLoader

class QPluginLoader

QPluginLoader 类在运行时加载一个插件。更多

PySide6.QtCore.QPluginLoader 的继承图

概要

属性

方法

静态函数

注意

本文档可能包含从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()卸载插件,但如果其他QPluginLoader实例正在使用相同的库,调用将失败,卸载只有在每个实例都调用了unload()时才会发生。在卸载发生之前,根组件也将被删除。

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

请注意,如果你的应用程序是静态链接到Qt的,那么QPluginLoader将无法使用。在这种情况下,你也需要静态链接到插件。如果你需要在静态链接的应用程序中加载动态库,你可以使用QLibrary

另请参阅

QLibrary

注意

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

property fileNameᅟ: str

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

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

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

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

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

另请参阅

load()

Access functions:
property loadHintsᅟ: Combination of QLibrary.LoadHint

此属性为 load() 函数提供一些关于其应如何行为的提示。

你可以提供关于插件中符号如何解析的提示。自Qt 5.7起,默认情况下,PreventUnloadHint 被设置。

请参阅loadHints的文档,了解此属性如何工作的完整描述。

另请参阅

loadHints

Access functions:
__init__([parent=None])
Parameters:

父对象QObject

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

__init__(fileName[, parent=None])
Parameters:
  • fileName – str

  • parentQObject

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

为了能够加载,文件的后缀必须符合平台可加载库的有效后缀,例如在Unix上是.so,在macOS和iOS上是.dylib,在Windows上是.dll。可以使用isLibrary()来验证后缀。

另请参阅

setFileName()

errorString()
Return type:

字符串

返回一个文本字符串,其中包含最后发生的错误的描述。

fileName()
Return type:

字符串

另请参阅

setFileName()

属性 fileNameᅟ 的获取器。

instance()
Return type:

QObject

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

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

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

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

另请参阅

load()

isLoaded()
Return type:

布尔

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

另请参阅

load()

load()
Return type:

布尔

加载插件并返回true如果插件加载成功;否则返回false。由于instance()在解析任何符号之前总是调用此函数,因此不需要显式调用它。在某些情况下,您可能希望提前加载插件,这时您将使用此函数。

另请参阅

unload()

loadHints()
Return type:

LoadHint 的组合

另请参阅

setLoadHints()

属性 loadHintsᅟ 的获取器。

metaData()
Return type:

QJsonObject

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

元数据可以以快速且低成本的方式查询,而无需实际加载插件。这使得例如将插件的功能存储在其中成为可能,并根据此元数据决定是否加载插件。

setFileName(fileName)
Parameters:

fileName – str

另请参阅

fileName()

属性 fileNameᅟ 的设置器。

setLoadHints(loadHints)
Parameters:

loadHintsLoadHint 的组合

另请参阅

loadHints()

属性 loadHintsᅟ 的设置器。

static staticInstances()
Return type:

QObject的列表

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

另请参阅

staticPlugins()

unload()
Return type:

布尔

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

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

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

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

另请参阅

instance() load()