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()在需要时自动删除它。
另请参阅