部署插件
本主题介绍如何部署插件库,以便 Qt 或应用程序在运行时加载。如果使用静态插件,则插件代码已是应用程序可执行文件的一部分,无需单独的部署步骤。
插件目录
在 Qt 中,当应用程序启动时,应用程序的可执行文件目录是 Qt 搜索插件的基本目录。
例如,在 Windows 上,如果应用程序在C:\Program Files\MyApp
中,并且它有一个样式插件,Qt 就会在C:\Program Files\MyApp\styles
中查找。
要查找应用程序可执行文件的位置,请参阅QCoreApplication::applicationDirPath() 。
Qt 还会查找QLibraryInfo::path(QLibraryInfo::PluginsPath) 所指定的目录,该目录通常位于QTDIR/plugins
;QTDIR
是安装 Qt 的目录。如果希望 Qt 查找其他地方,可以通过调用QCoreApplication::addLibraryPath() 添加所需的路径。如果您想设置自己的路径,可以使用QCoreApplication::setLibraryPaths() 。
另外,您也可以使用qt.conf
文件来覆盖编译到 Qt 库中的硬编码路径。更多信息,请参阅使用 qt.conf。
另一种方法是在运行应用程序前设置QT_PLUGIN_PATH
环境变量;多个路径可以用系统路径分隔符分隔。设置后,Qt 将在该变量指定的路径中查找插件。
注意: 不要导出QT_PLUGIN_PATH
作为全系统环境变量,因为它会干扰其他 Qt 安装。
动态加载和验证插件
加载插件时,Qt 库会进行一些合理性检查,以确定插件是否可以加载和使用。通过这种正确性检查,您可以同时安装多个 Qt 版本和配置。
以下规则适用:
- 与次版本号较高的 Qt 库链接的插件不会被次版本号较低的库加载。
例如Qt 6.2.0 将不会加载使用 Qt 6.3.0 构建的插件。示例:Qt 6.2.0 不会加载使用 Qt 6.3.0 构建的插件:Qt 6.2.0 将加载使用 Qt 6.1.0 构建的插件。示例:Qt 6.2.0 将加载以 Qt 6.1.0 构建的插件:Qt 6.2.0 将加载使用 Qt 6.2.1 构建的插件。 - 与主要版本号较低的 Qt 库链接的插件不会被主要版本号较高的库加载。
例如Qt 6.0.0 将不会加载使用 Qt 5.15.0 构建的插件。
在构建插件以扩展应用程序时,必须确保插件的配置方式与应用程序相同。这意味着,如果应用程序是以发布模式构建的,那么插件也应该以发布模式构建。Unix 操作系统除外,在该系统中,插件系统不会加载以不同于应用程序的模式构建的插件。
调试插件
有许多问题可能会导致编写正确的插件无法与设计用于使用它们的应用程序协同工作。其中许多问题与插件和应用程序的构建方式不同有关,通常是由不同的构建系统和流程造成的。
要从 Qt 获取有关其尝试加载的每个插件的诊断信息,请使用QT_DEBUG_PLUGINS
环境变量。在启动应用程序的环境中,将此变量设置为非零值。
下表描述了开发人员在创建插件时遇到问题的常见原因和可能的解决方案。
问题 | 原因 | 解决方案 |
---|---|---|
即使应用程序直接打开插件,也无法加载插件。Qt Widgets Designer 在Help|About Plugins 对话框中显示插件库,但每个插件库下都未列出插件。 | 应用程序及其插件以不同模式构建。 | 以与可执行文件相同的配置构建插件。 |
© 2025 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.