在Qt中直接在构建目录下直接运行.exe文件报错问题分析
在Qt中直接在构建目录下直接运行.exe文件报错问题分析
在学习Qt的过程中遇到过一个问题,直接在Qt构建目录下运行生成的.exe文件时会报错。这和MFC有一定的差别,如果MFC是可以直接运行的。
这是怎么回事呢?
在 Qt 中直接运行构建目录下的 .exe 文件(Windows 平台)时,需要确保以下 Qt 运行时库文件 和 依赖项 已放置在正确的位置。否则会出现程序无法启动或报错(如 缺少 Qt5Core.dll 等)。
1. 必须的 Qt 库文件
你的 .exe 需要以下 核心 Qt DLL 文件(根据项目使用的模块动态调整):
(1)基础 Qt 库
这些是 所有 Qt 程序 都需要的:
| 文件 | 说明 | 
|---|---|
| Qt5Core.dll | Qt 核心模块 | 
| Qt5Gui.dll | GUI 基础模块 | 
| Qt5Widgets.dll | 控件模块(QWidget 程序) | 
(2)额外依赖库
如果你的项目使用了以下模块,还需对应的 DLL:
| 文件 | 说明 | 
|---|---|
| Qt5Network.dll | 网络模块 | 
| Qt5Sql.dll | 数据库模块 | 
| Qt5Multimedia.dll | 多媒体模块 | 
| Qt5Qml.dll | QML 模块 | 
| Qt5Quick.dll | Quick 模块 | 
| … | 其他你使用的 Qt 模块 | 
2. 平台插件(必须)
Qt 程序运行时需要 平台插件(platforms 文件夹),否则会报错:
This application failed to start because it could not find or load the Qt platform plugin "windows"
必须包含的插件
1.platforms/qwindows.dll(Windows 平台插件)
2.其他可能需要的插件(如 minimal.dll、offscreen.dll 等
your_app.exe
├── platforms/
│   └── qwindows.dll
├── Qt5Core.dll
├── Qt5Gui.dll
└── Qt5Widgets.dll
如下图:

3. 其他可能需要的文件
(1)ICU 数据文件(如果使用 Qt 国际化)
- icudtXX.dll(如- icudt68.dll)
- icuinXX.dll
- icuucXX.dll
(2)OpenGL 驱动(如果使用 QOpenGL)
- opengl32sw.dll(软件渲染后备驱动)
- 或系统自带的 opengl32.dll(硬件加速)
(3)样式表插件(如果使用自定义 QSS)
- styles/qwindowsvistastyle.dll(如果需要 WindowsVista 样式)
(4)Qt 翻译文件(.qm 文件)
 
- 如果你的应用支持多语言,需要 .qm文件。
4. 如何获取这些文件?
方法 1:从 Qt 安装目录手动复制
- 进入 Qt 安装目录(如 C:\Qt\6.5.0\mingw_64\bin)。
- 找到你的 .exe所需的.dll文件(如Qt5Core.dll)。
- 复制到 .exe所在目录。
方法 2:使用 windeployqt 自动部署
 
Qt 提供了 windeployqt 工具,可以自动收集依赖项:
# 进入构建目录
cd /d "你的构建目录\release"
# 运行 windeployqt
windeployqt your_app.exe
它会自动复制所有需要的 .dll 和 plugins 到 .exe 目录。
注意:
- 确保 windeployqt版本与你的 Qt 版本匹配(如Qt 6.5.0对应windeployqt 6.5.0)。
- 如果 windeployqt找不到,检查PATH是否包含Qt安装目录\版本号\编译器\bin(如C:\Qt\6.5.0\mingw_64\bin)。
5. 验证是否可运行
- 确保所有 .dll和platforms/qwindows.dll已正确放置。
- 双击 .exe运行,如果无报错,则部署成功。
6. 常见问题
(1)报错:缺少 VCRUNTIME140.dll 或 MSVCP140.dll
 
- 原因:缺少 Visual C++ 运行时库(如果使用 MSVC 编译)。
- 解决: 
  - 安装 Visual C++ Redistributable(根据编译器选择 x86/x64)。
 
(2)报错:无法定位程序输入点于 Qt5Core.dll
 
- 原因:Qt5Core.dll版本不匹配(如 Debug/Release 混用)。
- 解决:确保所有 .dll和.exe是 同一构建模式(Debug 或 Release)。
(3)报错:This application failed to start because no Qt platform plugin could be initialized
 
- 原因:platforms/qwindows.dll缺失或路径错误。
- 解决: 
  - 确保 platforms文件夹和.exe在同一目录。
- 或设置 QT_QPA_PLATFORM_PLUGIN_PATH环境变量指向platforms目录。
 
- 确保 
总结
| 所需文件 | 说明 | 
|---|---|
| Qt5Core.dll | Qt 核心库 | 
| Qt5Gui.dll | GUI 基础库 | 
| Qt5Widgets.dll | 控件库(QWidget 程序) | 
| platforms/qwindows.dll | Windows 平台插件 | 
| 其他模块的 .dll | 如 Qt5Network.dll | 
| VC++ 运行时 | 如果使用 MSVC 编译 | 
platforms/qwindows.dll | Windows 平台插件 |
 | 其他模块的 .dll | 如 Qt5Network.dll |
 | VC++ 运行时 | 如果使用 MSVC 编译 |
推荐使用 windeployqt 自动部署,避免遗漏依赖项!
