本页内容

QPluginLoader Class

QPluginLoader 类在运行时加载插件。更多内容...

头文件: #include <QPluginLoader>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
继承自: QObject

注意:该类中的所有函数均为可重入的。

属性

公共函数

QPluginLoader(QObject *parent = nullptr)
QPluginLoader(const QString &fileName, QObject *parent = nullptr)
virtual ~QPluginLoader()
QString errorString() const
QString fileName() const
QObject *instance()
bool isLoaded() const
bool load()
QLibrary::LoadHints loadHints() const
QJsonObject metaData() const
void setFileName(const QString &fileName)
void setLoadHints(QLibrary::LoadHints loadHints)
bool unload()

静态公共成员

QObjectList staticInstances()
QList<QStaticPlugin> staticPlugins()
void qRegisterStaticPluginFunction(QStaticPlugin plugin)

详细说明

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 。

属性文档

fileName : QString

该属性存储插件的文件名

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

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

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

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

访问函数:

QString fileName() const
void setFileName(const QString &fileName)

另请参阅 load()。

loadHints : QLibrary::LoadHints

为load()函数提供一些关于其行为方式的提示。

您可以指定插件中符号的解析方式。自 Qt 5.7 起,QLibrary::PreventUnloadHint 默认已启用。

有关此属性工作原理的完整说明,请参阅QLibrary::loadHints 的文档。

访问函数:

QLibrary::LoadHints loadHints() const
void setLoadHints(QLibrary::LoadHints loadHints)

另请参阅 QLibrary::loadHints 。

成员函数文档

[explicit] QPluginLoader::QPluginLoader(QObject *parent = nullptr)

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

[explicit] QPluginLoader::QPluginLoader(const QString &fileName, QObject *parent = nullptr)

根据给定的parent 构建一个插件加载器,该加载器将加载由fileName 指定的插件。

要使文件可加载,其后缀必须是符合平台规范的可加载库的有效后缀,例如:在 Unix 系统上为.so ,在 macOS 和 iOS 系统上为 -.dylib ,在 Windows 系统上为.dll 。可通过QLibrary::isLibrary() 验证后缀是否有效。

另请参阅 setFileName()。

[virtual noexcept] QPluginLoader::~QPluginLoader()

销毁QPluginLoader 对象。

除非显式调用了 `unload()`,否则该插件将一直驻留于内存中,直至应用程序终止。

另请参阅 isLoaded() 和unload()。

QString QPluginLoader::errorString() const

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

QObject *QPluginLoader::instance()

返回插件的根组件对象。如有必要,会加载该插件。如果无法加载插件,或者无法实例化根组件对象,该函数将返回nullptr 。

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

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

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

另请参阅 load()。

bool QPluginLoader::isLoaded() const

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

另请参阅 load()。

bool QPluginLoader::load()

加载插件,如果加载成功则返回true ;否则返回false 。由于instance()在解析任何符号之前都会调用此函数,因此无需显式调用它。在某些情况下,您可能希望预先加载插件,此时应使用此函数。

另请参阅 unload()。

QJsonObject QPluginLoader::metaData() const

返回此插件的元数据。该元数据是在编译插件时,通过Q_PLUGIN_METADATA()宏以JSON格式指定的数据。

无需实际加载插件,即可快速且低开销地查询这些元数据。这使得可以将插件的功能权限等信息存储在元数据中,并根据这些元数据来决定是否加载该插件。

[static] QObjectList QPluginLoader::staticInstances()

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

另请参阅 staticPlugins()。

[static] QList<QStaticPlugin> QPluginLoader::staticPlugins()

返回插件加载器所持有的 QStaticPlugins 列表。该函数与staticInstances() 类似,不同之处在于QStaticPlugin 还包含元数据信息。

另请参阅 staticInstances()。

bool QPluginLoader::unload()

卸载插件,如果插件能够被卸载,则返回true ;否则返回false 。

应用程序终止时会自动执行此操作,因此通常无需调用此函数。

如果其他 `QPluginLoader ` 实例正在使用同一个插件,则调用将失败;只有当所有实例都已调用 `unload()` 时,才会发生卸载。

请勿尝试删除根组件。应依赖 unload() 函数,它会在需要时自动将其删除。

另请参阅 instance() 和load()。

相关非成员

void qRegisterStaticPluginFunction(QStaticPlugin plugin)

将指定的plugin 注册到插件加载器中,并由Q_IMPORT_PLUGIN() 调用。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.