部署插件
https://doc.qt.io/qt-5/deployment-plugins.html
本主题说明如何为Qt部署插件库或在运行时加载您的应用程序。如果您使用静态插件,那么插件代码已经是应用程序可执行文件的一部分,并且不需要单独的部署步骤。
插件目录
在Qt中,当应用程序启动时,应用程序的可执行目录是Qt搜索插件的基本目录。
例如,在Windows上,如果应用程序在其中C:\Program Files\MyApp
并且具有样式插件,则Qt将在中查找C:\Program Files\MyApp\styles
。
要找出应用程序可执行文件的位置,请参见QCoreApplication :: applicationDirPath()。
Qt还会查找由QLibraryInfo :: location(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 5.0.0将不会加载使用Qt 5.0.1构建的插件。 - 具有较低主要版本号的Qt库链接的插件将不会由具有较高主要版本号的库加载。
示例: Qt 5.0.1将不会加载使用Qt 4.8.2构建的插件。
示例: Qt 5.1.1将加载使用Qt 5.1.0和Qt 5.0.3构建的插件。
在构建用于扩展应用程序的插件时,重要的是确保以与应用程序相同的方式配置插件。这意味着,如果应用程序以发布模式构建,则插件也应以发布模式构建。除Unix操作系统外,插件系统不会加载以与应用程序不同的模式构建的插件。
如果将Qt配置为以调试和发布模式构建,而仅以发布模式构建应用程序,则需要确保插件也以发布模式构建。默认情况下,如果Qt的调试版本可用,则插件将仅在调试模式下构建。要强制在发布模式下构建插件,请将以下行添加到插件的project(.pro
)文件中:
CONFIG += release
这样可以确保插件与应用程序中使用的库版本兼容。
调试插件
有许多问题可能会阻止正确编写的插件与旨在使用它们的应用程序一起使用。其中许多与插件和应用程序构建方式的差异有关,通常是由单独的构建系统和流程引起的。
要从Qt获取有关尝试加载的每个插件的诊断信息,请使用QT_DEBUG_PLUGINS
环境变量。在启动应用程序的环境中将此变量设置为非零值。
下表描述了开发人员在创建插件和可能的解决方案时遇到的问题的常见原因。
问题 | 原因 | 解 |
---|---|---|
即使直接由应用程序打开,插件也无法加载。Qt Designer在其“帮助|关于插件”对话框中显示了插件库,但每个插件下均未列出插件。 | 该应用程序及其插件以不同的模式构建。 | 通过在每个项目文件debug_and_release 的CONFIG变量后面附加,可以共享相同的构建信息,也可以在调试和发布模式下构建插件。 |