前言
之前写了一篇【Qt4 设计师自定义控件】项目创建➕使用后,觉得还是不够优雅,如果我要生产很多个插件怎么办,每次都要搞一堆重复性的东西,于是我又研究了如何自动化实现这些重复性的工作。
目标
用Qt写一个自动打包程序,实现一键打包 ( ๑ • ˋ ㅂ • ˊ ) و✧ (๑•̀ㅂ•́)و✧ (๑•ˋㅂ•ˊ)و✧(充满 power!)
准备工作
要实现这个功能,需要先了解一下如何手动打包多个插件的多种编译版本。
我们可以提前准备好下面这种结构的文件目录(你可以自己改,但后面的路径一定要写对)

对于每一个插件,我们都配置一个单独的.pri
文件,最后把所有.pri
文件再统一配置给allPri.pri
,这样我们每次创建新项目的时候,只需要引入这个allPri.pri
文件即可!
现在我们来看看这些配置文件.pri
该怎么写
- 对于每一个插件自己的
.pri
:
win32 {
# 这三个变量的取值看你文件夹创建的目录,如果你和上面的图片一样,这样写就ok
BasePath = $$PWD/lib
MSVCKit = MSVC2019_64
MinGWKit = MinGW_64
contains(QMAKE_COMPILER, msvc) {
# MSVC编译器
# 这里的路径一定要和你自己创建的目录一致
isDebugBuild: LIBS += -L$${BasePath}/$${MSVCKit}/debug/ -lyourplugind # 只有msvc的debug是d结尾
else: LIBS += -L$${BasePath}/$${MSVCKit}/release/ -lyourplugin
}
else {
# 其他编译器,默认MinGW
# 这里的路径一定要和你自己创建的目录一致
isDebugBuild: LIBS += -L$${BasePath}/$${MinGWKit}/debug/ -lyourplugin
else: LIBS += -L$${BasePath}/$${MinGWKit}/release/ -lyourplugin
}
}
# 这里的路径一定要和你自己创建的目录一致
INCLUDEPATH += $$PWD/include
DEPENDPATH += $$PWD/include
- 对于
allPri.pri
# 使用相对路径,所以allPri.pri的位置要放在这些插件的上级目录中,按照图来就不会错
include(Plugin1/Plugin1.pri)
include(Plugin2/Plugin2.pri)
include(Plugin3/Plugin3.pri)
include(Plugin4/Plugin4.pri)
include(Plugin5/Plugin5.pri)
# ...
现在你已经写完配置了,那么创建的项目如何引用这些插件?答案是在你的pro
文件中引入allPri.pri
:
# Project.pro
# 你喜欢把PluginPack放哪里就放哪里,把绝对路径引入就好了,这个放在pro最后一行就ok。
include(D:/software/Qt/Qt6.5.3/PluginPack/allPri.pri)
当然,最后别忘了把每个插件的.dll
文件拷贝到designer文件夹中,不然都没法显示。
实现
恭喜你,现在你已经学会了如何手动打包。
但是每次我们都要 创建文件夹 → 拷贝依赖 → 书写pri
文件
这三步操作下来,属实有点烦人。。。
现在我们就要设计一个可以一键打包的工具来实现上面的三步操作!!!
首先我们要确定一件事:哪些是固定的(不需要我们输入)?,哪些是变化的(需要我们告诉exe)?
不变:
- 目录结构(创建文件夹)
- pri文件书写框架(书写
.pri
文件) - 依赖生成位置(拷贝依赖)
- 依赖拷贝位置(拷贝依赖)
变化:
- 目录名称(创建文件夹)
- 插件名称(书写
.pri
文件) - 依赖名称(拷贝依赖)
这些工作都准备好之后,我们就可以写代码了,这里我直接展示成品,想要源码的可以点击这里;
我们需要输入四个东西:
分别是
- 项目路径(比较固定,前缀基本不会变)
- Qt Creator的designer文件夹路径(完全固定,你可以省略这一项,把他写死)
- 你的插件名称,建议和项目同名(不固定)
- 你的打包位置(比较固定,只要你不移动它,也可以写死)

最后的最后,你在使用的时候,别忘了在你的.pro
文件在引入allPri.pri
,直接使用绝对路径就好了。
include(D:/software/Qt/Qt6.5.3/PluginPack/allPri.pri)
集成到Qt Creator
在此之前,你需要先把工具打包出来。
最后我们可以把这个小工具集成到我们的Qt Creator中,操作如下:
最后点击【应用/确定】
注意:我们在使用打包工具时,有可能设计到操作被占用的文件(一般是designer的dll文件被占用),所以打包工具还需要一个提示关闭Qt的功能。
效果:(自动关闭Qt → 文件不再被占用 → 开始打包 → 打包完成 → 自动重启Qt)
如果是新插件,还需要提醒用户是否重启Qt以便加载插件,这里就不展示了。