〇、前言

其实这个本来就没啥可写的东西,但是今天在打包 QML 程序时遇到了问题。上网搜解决办法,铺天盖地的全是错误信息。好在最后终于找到了一个明白老哥,才解决这个问题。

不得不说,国内这某 C 是真的恶心,错的都抄来抄去。真是垃圾堆里找垃圾,没用的东西···

所以,这里总结一下 QT 程序打包的相关问题。

最后,要感谢老哥的文章给了我帮助:

博主为啥不吃肉捏

一、QWidget 程序打包

  1. 先找到项目的构建套件版本,并切换到 Release 模式,然后 Ctrl+Shift+B 进行构建项目(请注意区分 32bit64bit,否则会出现 0xc00007b 等错误)。

图1.1 QT 构建套件版本

  1. 将构建出来的可执行程序(这里以 FormatQuick.exe 为例)以及你程序运行需要的一些必要文件(例如:我这里依赖 bin/ffmpeg.exe)放到一个新的目录里(文件名无所谓)。

  2. 按下 Win 键打开菜单,找到对应的 Qt CMD 程序,用“管理员身份”启动(可以避免一些权限问题)。

图1.2 Qt CMD 工具

  1. 使用 cd "YOUR_PATH" 命令进入待打包程序所在根目录。
  2. 使用 windeployqt.exe YOUR_PROGRAM_NAME.exe 命令进行程序打包。可以参考下图:

图1.3 参考图

二、QML 程序打包

基本与使用 Qt CMD 打包 QWidget 程序差不太多。

  1. 先找到项目的构建套件版本(这里以 Desktop Qt 5.15.2 MSVC2019 32bit 为例),并切换到 Release 模式,然后 Ctrl+Shift+B 进行构建项目(请注意区分 32bit64bit,否则会出现 0xc00007b 等错误)。
  2. 将构建出来的可执行程序(这里以 eWeather.exe 为例)以及你程序运行需要的一些必要文件(例如:我这里依赖 bin/WeatherAPIGet.exe)放到一个新的目录里(文件名无所谓)。
  3. 按下 Win 键打开菜单,找到对应的 Qt CMD 程序,用“管理员身份”启动(可以避免一些权限问题)。
  4. 使用 cd "YOUR_PATH" 命令进入待打包程序所在根目录。
  5. 使用 windeployqt.exe YOUR_PROGRAM_NAME.exe -qmldir YOUR_QML_SOURCES_DIR 命令进行程序打包。可以参考下图:

注意:这里 -qmldir YOUR_QML_SOURCES_DIRYOUR_QML_SOURCES_DIR 指的是你的项目中 qml.qrc 文件所在的文件夹路径(这里我指向的是 main.qml 的文件夹路径 / 更准确的是入口 qml 文件所在文件夹路径),切勿被网络上错综复杂的文章误导指向 Qt 安装目录下的 qml 文件夹!

这部分是我的推理,有问题可以评论区反馈一下,谢谢大家!

图2.1 参考图

三、其他

在今天的打包过程中,我遇到个问题:

因为某些原因导致我的菜单中并没有对应的 Qt CMD 工具,从而导致了我必须使用系统的 CMD ,并自己手动配置环境。

其实也就是依赖环境变量,让 CMD 找到 windeployqt.exe 程序,实际上这是个不明智的选择。

所以,如果你也出现类似的问题了,可以试试卸载 Anaconda 并重新安装 Qt 试试。

经过检查可能原因如下:
因为我先安装了 Anaconda 后安装的 Qt,导致 Anaconda 的环境变量影响了 Qt 的安装,进而导致了一些问题。
我彻底卸载 Anaconda 和 Qt 后再重新安装 Qt 便解决了问题。

补充:下载 Qt Community 版

注意:如果 Qt Maintenance Tool 在下载过程中经常出现无法下载的情况,大多数是因为网络的原因。可以使用 CMD 命令启动程序,并切换下载源:

1
.\qt-unified-windows-x64-4.5.2-online.exe --mirror https://mirrors.cloud.tencent.com/qt/

或者(请确保 CMD 当前环境目录在 Maintenance.exe 所在目录)

1
.\MaintenanceTool.exe --mirror https://mirrors.cloud.tencent.com/qt/