记录:Windows下QML程序打包

1.打包过程

之前本来打过一次QML的程序包,隔久了又忘了,于是一番百度,才找到命令是类似这样的:

windeployqt name.exe --qmldir E:\Qt\Qt5.13.0\5.13.0\msvc2017\qml

同样是用qt自带的cmd工具对指定目录执行命令,只是比widgets打包多了一个qml路径。

记录:Windows下QML程序打包

目测该拷贝的库也拷贝过去了,结果点击exe并不能运行,连个响应都没有。重定向qDebug输出到文本,只看到一堆qml的东西没加载。

在网上找了一圈都是只有windeployqt这一步的,我只能自己折腾了。写了下qt.conf文件配置plugins,并没效果。后来把qt环境的qml文件夹整个copy过去,神奇的运行起来了,或许是qml代码里用到的库打包的时候没有检测,导致程序启动时加载失败。

记录:Windows下QML程序打包

注意打包命令出来的Qt5Core.dll和bin目录下那个有点不一样,bin目录下那个带环境绝对路径,自己手动copy的需要注意下。

 记录:Windows下QML程序打包

2.整理下打包目录

由于文件夹和dll太多了,接下来把目录整理下。先把qml文件夹下的带d的debug动态库删了(我是打的release),然后把windeploy打包过来的那些原qml目录下的大写Q开头的文件夹删了,原plugins文件夹下的新建个plugins文件夹放置,默认qml和plugins是平级的,所以不用写qt.conf文件指定。(暂时还没找到方法把这些原bin目录下的dll怎么整理到一个文件夹下)

记录:Windows下QML程序打包

对于qt.conf,参照 https://doc.qt.io/qt-5/qt-conf.html

不过最后应该是要做成安装包的(使用setup factory、inno setup、qt install framework等工具),所以这一步只是处于强迫症行为,请忽略。

3.安装VC运行环境

MSVC编译器打包发布的程序可能会遇到提示找不到msvcp100.dll(数字可能不一样)。此时,需要把msvc目录下的vcredist_x86/x64.exe拿过去安装下(可以用everything搜这个程序,然后把MSVC安装目录下那个copy出来用就行了)。有些人直接把这个dll放在目录下,但是我试了下没运行成功。

记录:Windows下QML程序打包