- class QPluginLoader#
类的
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()
尝试卸载插件,但如果其他实例正在使用同一库,调用将失败,并且卸载只在所有实例都调用unload()
后才发生。在卸载发生之前,根组件也将被删除。有关如何通过插件使您的应用程序可扩展的更多信息,请参阅如何创建Qt插件。
请注意,如果您的应用程序是静态链接到Qt的,则不能使用
QPluginLoader
。在这种情况下,您还需要将插件静态链接。如果需要在一个静态链接的应用程序中加载动态库,则可以使用QLibrary
。另请参阅
注
当使用
from __feature__ import true_property
时,可以直接使用属性;否则,可以通过访问函数使用属性。- propertyfileNameᅟ: str#
该属性保存插件的文件名。
我们建议在文件名中省略文件的扩展名,因为
QPluginLoader
将自动查找具有适当后缀的文件(参见isLibrary()
)。在加载插件时,
QPluginLoader
会搜索由libraryPaths()
指定的所有插件位置,除非文件名包含绝对路径。成功加载插件后,fileName() 返回插件的完全限定文件名,包括如果构造函数中给出或通过 setFileName() 传递的完整路径。如果文件名不存在,它不会被设置。因此,此属性将包含一个空字符串。
默认情况下,此属性包含一个空字符串。
另请参阅
- 访问函数
- 属性 loadHints: QLibrary.LoadHint 的组合#
此属性为
load()
函数提供了一些行为提示。您可以提供有关插件中符号解析的提示。默认情况下,自 Qt 5.7 开始,设置了
PreventUnloadHint
。请参阅
loadHints
的文档,以详细了解此属性如何工作。另请参阅
使用给定的
parent
构造插件加载器。- __init__(fileName[, parent=None])
- 参数:
fileName – 字符串
parent –
QObject
使用给定的
parent
构造插件加载器,它将加载由fileName
指定的插件。为了加载,文件的后缀必须是平台支持的加载库的有效后缀,例如 Unix 上的
.so
,macOS 和 iOS 上的.dylib
,以及 Windows 上的.dll
。可以通过isLibrary()
验证后缀。另请参阅
- errorString()#
- 返回类型:
字符串
返回最后一次发生的错误的描述文本字符串。
- fileName()#
- 返回类型:
字符串
另请参阅
属性
fileName
的获取器。返回插件的主组件对象。如果需要,会加载插件。如果插件无法加载或无法实例化根组件对象,则函数返回
None
。如果根组件对象已被销毁,调用此函数将创建一个新实例。
此函数返回的根组件,不会在销毁
QPluginLoader
时被删除。如果您想确保根组件被删除,应在不再需要访问核心组件后立即调用unload()
。当库最终被卸载时,根组件将自动被删除。组件对象是一个
QObject
。使用qobject_cast()
访问感兴趣的接口。另请参阅
- isLoaded()#
- 返回类型:
bool
如果插件已加载,返回
true
;否则返回false
。另请参阅
- load()#
- 返回类型:
bool
加载插件并返回
true
(表示插件加载成功)或false
。由于instance()
在解析任何符号之前总会在调用此函数,因此通常不需要显式调用它。在某些情况下,您可能希望插件预先加载,在这种情况下,可使用此函数。另请参阅
属性
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 的值。
设置属性 loadHints 的值。
返回插件加载器持有的静态插件实例(根组件)的列表。
另请参阅
staticPlugins()
- unload()#
- 返回类型:
bool
卸载插件并返回
true
如果插件可以被卸载;否则返回false
。这会在应用程序终止时自动发生,因此通常不需要调用此函数。
如果其他
QPluginLoader
实例正在使用相同的插件,调用将失败,只有当每个实例都调用 unload() 时才进行卸载。不要尝试删除根组件。相反,依赖于 unload() 会在需要时自动删除它。
另请参阅