程序地带

QT部署插件


部署插件

https://doc.qt.io/qt-5/deployment-plugins.html


本主题说明如何为Qt部署插件库或在运行时加载您的应用程序。如果您使用静态插件,那么插件代码已经是应用程序可执行文件的一部分,并且不需要单独的部署步骤。


插件目录

在Qt中,当应用程序启动时,应用程序的可执行目录是Qt搜索插件的基本目录。


例如,在Windows上,如果应用程序在其中C:Program FilesMyApp并且具有样式插件,则Qt将在中查找C:Program FilesMyAppstyles。


要找出应用程序可执行文件的位置,请参见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变量后面附加,可以共享相同的构建信息,也可以在调试和发布模式下构建插件。

 


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wjffsx/article/details/111246226

随机推荐

用Python内置模块处理ini配置文件

用Python内置模块处理ini配置文件

简介开发人员每天都在处理一些大型而复杂的项目,而配置文件会帮到我们并节省不少时间。在处理配置文件过程中,无需更改源代码本身,只需要调整配置文件即可访问不同的A...

冠希01 阅读(539)

c++基础知识之ASCII码

文章目录c++基础知识之ASCII码控制字符可显示字符c++基础知识之ASCII码控制字符编码字符/缩写解释0NUL(NULL)空字符1SOH(StartOfHeadl...

林祥威 阅读(336)

javascript基础总结--7

JavaScript_7      常用的javascript的内置对象      1.字符串对象(String)      2.Number对象      3.JavaS...

m0_49935332 阅读(990)

c语言基础知识第二篇

for循环for语句一般形式中的各表达式可以省略,但是分号间隔符不能少。需要注意省略表达式1之前要给循环变量赋初值。如省略去表达式2或者3则将造成无限循环,这是应在循环体内...

King Blog 阅读(708)

类加载 (加载,验证,准备,解析,初始化)

类加载 (加载,验证,准备,解析,初始化)

定义当程序主动使用某个类时,如果该类还未被加载到内存中,则JVM会通过加载、连接、初始化3个步骤来对该类进行初始化。如果没有意外,JVM将会连续完成3个步骤&...

沐雨、 阅读(340)

C#halcon点拟合圆形函数

publicboolFitCircle(double[]X,double[]Y,outdoubleRcX,outdoubleRcY,outdoubleR){t...

小邢同学 阅读(552)