在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.dlloffscreen.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 安装目录手动复制

  1. 进入 Qt 安装目录(如 C:\Qt\6.5.0\mingw_64\bin)。
  2. 找到你的 .exe 所需的 .dll 文件(如 Qt5Core.dll)。
  3. 复制到 .exe 所在目录。

方法 2:使用 windeployqt 自动部署

Qt 提供了 windeployqt 工具,可以自动收集依赖项:

复制代码
# 进入构建目录
cd /d "你的构建目录\release"

# 运行 windeployqt
windeployqt your_app.exe

它会自动复制所有需要的 .dllplugins.exe 目录。

注意

  • 确保 windeployqt 版本与你的 Qt 版本匹配(如 Qt 6.5.0 对应 windeployqt 6.5.0)。
  • 如果 windeployqt 找不到,检查 PATH 是否包含 Qt安装目录\版本号\编译器\bin(如 C:\Qt\6.5.0\mingw_64\bin)。

5. 验证是否可运行

  1. 确保所有 .dllplatforms/qwindows.dll 已正确放置。
  2. 双击 .exe 运行,如果无报错,则部署成功。

6. 常见问题

(1)报错:缺少 VCRUNTIME140.dllMSVCP140.dll

  • 原因:缺少 Visual C++ 运行时库(如果使用 MSVC 编译)。
  • 解决

(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 自动部署,避免遗漏依赖项!

相关推荐
胡斌附体8 分钟前
qt socket编程正确重启tcpServer的姿势
开发语言·c++·qt·socket编程
冷凝女子1 小时前
【QT】获取文件路径中的文件名,去掉后缀,然后提取文件名中的数字
开发语言·数据库·qt
孤独得猿1 小时前
Qt常用控件第一部分
服务器·开发语言·qt
強云7 小时前
界面架构- MVP(Qt)
qt·架构
嘤国大力士14 小时前
C++11&QT复习 (七)
java·c++·qt
嘤国大力士16 小时前
C++11&QT复习 (十一)
开发语言·c++·qt
wkm95616 小时前
qt.qpa.xcb: could not connect to display解决方法
开发语言·qt·ubuntu
AAA废品回收站陈师傅1 天前
19信号和槽_信号和槽的基本概念
qt
爱吃巧克力的程序媛1 天前
在 Qt 创建项目时,Qt Quick Application (Compat) 和 Qt Quick Application
开发语言·qt