Qt5 QML程序Release版本发布程序无法显示的问题解决过程。

一:先解析下我的环境:

1:QT平台: qt-opensource-windows-x86-mingw530-5.7.1

2:系统:Win7 64位平台

3:使用QT quick control 2.0 版本

4:本程序的名字位 Btc.exe

5:本程序使用windeployqt打包的目录如下:

 

二:现象

1:使用QML页面开发,没有使用特殊的硬件。

2:在QT Creator 中正常运行,正常显示。

3:使用windeployqt的打包工具打包后直接双击运行程序,报错:

4:使用windeployqt打包Release版本的程序,单独运行程序无反应,但在任务管理器中存在进程

 

5:如果将程序放在 QT的MinGW环境下又能正常运行,我这边的QT路径是:D:\Qt\Qt5.7.1\5.7\mingw53_32\bin。

 

三:解决过程

为什么在QT Creator中运行正常,而且把程序放在mingw的bin目录下也正常,使用windeployqt打包的直接双击运行却无法显示。

1:既然能在mingw的环境运行,于是我把整个mingw的bin目录所有文件都搬过来,想不到文件有2.3G多。但是程序依然运行不显示。

2:一开始使用windeployqt打包直接运行报错,但错误提示清晰,很好解决,把三个dll加进去即可:

libgcc_s_dw2-1.dll

libstdc++-6.dll

libwinpthread-1.dll

3:放进去之后双击运行程序没有报任何错误,在任务管理器里也又进程,只是不显示界面。

4:把程序目录里文件夹移到程序外面,然后再双击运行,报错:

 

5:好吧,提示有“”platform“”字样,于是把 之前产生的platforms文件夹放回到程序目录里,结果没报错,但是依然不显示界面。

6:在上面的基础上,再把 mingw 的bin目录里的所有dll文件复制到当前程序目录里,竟然正常运行,但是所有文件加起来有2.3G,于是进行裁剪,把很多明确不需要

的Debug版本的dll清除了,最后清理到只有20多MB。

7:以为这样可以解决了,但还是不明白原因,于是继续追查,对比从mingw的bin目录复制过来的dll和windeployqt打包的dll,以为是windeployqt把一些dll漏掉了,但是

结果为false,因为windeployqt打包的dll更多:

 

8:继续追击,我检查了DLL的文件大小,发现都一样,百思不得其解,为什么windeployqt打包的dll反倒不能运行,最后我决定使用MD5校验

来检查,当检查到Qt5Core.dll的时候大吃一惊,他们的MD5不一样

 

9:随后检查了其他的dll,发现MD5都一样,再次验证,把mingw的bin目录的Qt5Core.dll文件复制到程序不显示的目录里,双击运行程序,一切正常!

 

结论:

如果开发的QML程序运行没显示,可以尝试下列解决方法:

1:把windeployqt打包后的目录移到程序的上一层目录里。

2:如果是基于mingw的程序,记得把windeployqt打包的Qt5Core.dll文件替换为MinGW的bin目录里的同名文件。

展开阅读全文

没有更多推荐了,返回首页