PySide6.QtCore.QPluginLoader¶
- class QPluginLoader¶
QPluginLoader类在运行时加载一个插件。更多…概要¶
属性¶
fileNameᅟ- 插件的文件名loadHintsᅟ- 为load()函数提供一些关于其行为方式的提示
方法¶
def
__init__()def
errorString()def
fileName()def
instance()def
isLoaded()def
load()def
loadHints()def
metaData()def
setFileName()def
setLoadHints()def
unload()
静态函数¶
注意
本文档可能包含从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。另请参阅
注意
当使用
from __feature__ import true_property时,属性可以直接使用,否则通过访问器函数使用。- property fileNameᅟ: str¶
此属性保存插件的文件名。
我们建议在文件名中省略文件的后缀,因为
QPluginLoader会自动查找带有适当后缀的文件(参见isLibrary())。加载插件时,
QPluginLoader会在由libraryPaths()指定的所有插件位置中搜索,除非文件名具有绝对路径。成功加载插件后,fileName() 返回插件的完全限定文件名,包括在构造函数中提供或传递给 setFileName() 的插件的完整路径。如果文件名不存在,则不会设置。此属性将包含一个空字符串。
默认情况下,此属性包含一个空字符串。
另请参阅
- Access functions:
- property loadHintsᅟ: Combination of QLibrary.LoadHint¶
此属性为
load()函数提供一些关于其应如何行为的提示。你可以提供关于插件中符号如何解析的提示。自Qt 5.7起,默认情况下,
PreventUnloadHint被设置。请参阅
loadHints的文档,了解此属性如何工作的完整描述。另请参阅
- Access functions:
使用给定的
parent构造一个插件加载器。- __init__(fileName[, parent=None])
- Parameters:
fileName – str
parent –
QObject
使用给定的
parent构造一个插件加载器,该加载器将加载由fileName指定的插件。为了能够加载,文件的后缀必须符合平台可加载库的有效后缀,例如在Unix上是
.so,在macOS和iOS上是.dylib,在Windows上是.dll。可以使用isLibrary()来验证后缀。另请参阅
- errorString()¶
- Return type:
字符串
返回一个文本字符串,其中包含最后发生的错误的描述。
- fileName()¶
- Return type:
字符串
另请参阅
属性
fileNameᅟ的获取器。返回插件的根组件对象。如果需要,插件将被加载。如果插件无法加载或根组件对象无法实例化,函数将返回
None。如果根组件对象被销毁,调用此函数将创建一个新实例。
此函数返回的根组件在
QPluginLoader销毁时不会被删除。如果你想确保根组件被删除,你应该在不再需要访问核心组件时立即调用unload()。当库最终被卸载时,根组件将自动被删除。组件对象是一个
QObject。使用qobject_cast()来访问你感兴趣的接口。另请参阅
- isLoaded()¶
- Return type:
布尔
如果插件已加载,则返回
true;否则返回false。另请参阅
- load()¶
- Return type:
布尔
加载插件并返回
true如果插件加载成功;否则返回false。由于instance()在解析任何符号之前总是调用此函数,因此不需要显式调用它。在某些情况下,您可能希望提前加载插件,这时您将使用此函数。另请参阅
属性
loadHintsᅟ的获取器。- metaData()¶
- Return type:
QJsonObject
返回此插件的元数据。元数据是在编译插件时使用
Q_PLUGIN_METADATA()宏以json格式指定的数据。元数据可以以快速且低成本的方式查询,而无需实际加载插件。这使得例如将插件的功能存储在其中成为可能,并根据此元数据决定是否加载插件。
- setFileName(fileName)¶
- Parameters:
fileName – str
另请参阅
属性
fileNameᅟ的设置器。属性
loadHintsᅟ的设置器。返回由插件加载器持有的静态插件实例(根组件)列表。
另请参阅
staticPlugins()- unload()¶
- Return type:
布尔
卸载插件并返回
true如果插件可以被卸载;否则返回false。这会在应用程序终止时自动发生,因此通常不需要调用此函数。
如果其他
QPluginLoader实例正在使用相同的插件,调用将失败,卸载只有在每个实例都调用unload()时才会发生。不要尝试删除根组件。相反,依赖unload()在需要时自动删除它。
另请参阅