必须用qt自带终端以release模式构建并运行windeployqt.exe,qml项目需指定--qmldir参数,否则程序闪退或白屏;同时需手动部署vc++运行时和自定义字体文件。

直接用 windeployqt.exe 打包,但必须在 Qt 自带终端里运行,且 QML 项目一定要加 --qmldir 参数,否则必闪退。
Release 编译是硬性前提
Debug 版本的 .exe 依赖调试版 DLL(比如 Qt6Cored.dll),普通电脑根本没这玩意儿,双击就报错或直接消失。Qt Creator 左下角构建模式必须切到 Release,再点构建。生成的 .exe 通常在 build-xxx-Release/release/ 目录下。把它单独拷进一个全英文、无空格的新文件夹(比如 D:\MyApp\),其他中间文件全删掉。
必须用 Qt 自带终端执行 windeployqt
Windows 的 cmd 或 PowerShell 没有 Qt 环境变量,windeployqt.exe 根本找不到——这不是路径问题,是环境缺失。去开始菜单搜 “Qt 6.x.x (MSVC 20xx 64-bit)” 或 “Qt 6.x.x (MinGW x.x 64-bit)”,点那个带编译器名字的命令行快捷方式。进去后先 cd /d D:\MyApp 切到你的发布目录,再运行打包命令。
QML 项目不加 --qmldir 就白忙活
默认情况下 windeployqt 只扫 C++ 代码里的 Qt 依赖,完全 ignore .qml 文件里写的 import QtQuick.Controls 6.5 这种语句。结果就是:程序启动、窗口出来、一片空白,控制台也没报错。正确命令是:
windeployqt.exe MyApp.exe --qmldir "C:\path\to\your\qml\folder"
这个路径必须指向你项目中实际存放 main.qml 的那个文件夹,不是 .pro 或 qrc 路径。如果 QML 文件分散在多级子目录,--qmldir 只支持单个根目录,得确保所有 import 都能从该目录递归解析到。
VC++ 运行时和字体容易被忽略
windeployqt 不会自动复制 VC++ 运行时(vcruntime140.dll 等),尤其是 MSVC 编译的 Release 程序,目标机器没装 Visual C++ Redistributable 就直接崩。手动把对应版本的 vc_redist.x64.exe(或 x86)一起发给用户,或者用 /verbose=2 参数看它到底漏了啥。另外,如果界面用了非系统字体(比如自定义 FontLoader),windeployqt 也不会管,得自己把字体文件放进发布目录并改 FontLoader.source 为相对路径。











