1.背景
有时候需要把qt程序单独打包成dll,给第三方程序调用,此时第三方程序为主进程,调用qt封装的dll,所有qt插件依赖需要放置在主调用程序同级目录,否者无法调用;或者单纯只是嫌弃程序运行目录文件太多,想要改变qt插件目录。为了解决这个问题,有两种解决方案,在封装的dll中进行setLibraryPaths和qt.conf配置。
2.方案一setLibraryPaths
QApplication aApp(argc,argv);
QApplication::setLibraryPaths(QStringList(QCoreApplication::applicationDirPath()+"/QtPlugins/"));
// 'QtPlugins'为设置的插件放置目录,根据自己需要修改
3.方案二qt.conf
a.创建其qt.conf文件
b.填入插件配置
[Paths]
Prefix = ./QtPlugin // 插件主目录,其他的都以这个为父目录
ArchData = .
Data = .
Libraries = .
LibraryExecutables = .
Binaries = .
Plugins = .
Imports = .
Qml2Imports = .
Translations = translations
c.将qt.conf添加到资源文件,路径前缀:/qt/etc
<RCC>
<qresource prefix="/qt/etc">
<file>qt.conf</file>
</qresource>
</RCC>
d.将程序用到的qt插件拷贝到: ./QtPlugin下,例如:./QtPlugin/platforms
4.测试
创建一个win32程序TestLoad,调用qt封装的TestCore.dll
*注意:qt直接依赖库只可以放到被调用dll或者exe程序同级目录,否则程序无法启动(如:qcore、qwidget等)