您当前的位置: 首页 >  windows

龚建波

暂无认证

  • 4浏览

    0关注

    313博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

记录:Windows下QML程序打包

龚建波 发布时间:2019-08-13 20:41:49 ,浏览量:4

0.本文修改记录

(2019-9-3) 修改了VC环境相关的内容

(2020-3-5) 修改了QML模块相关的内容

(2022-8-31)one-rabbit大佬指出打包命令的参数错误,根据文档可知:qmldir应该为exe对应项目qml文件目录,qmlimport才是模块搜索的qml目录。之前错误的将qmldir设置为了安装目录。

文档:https://doc.qt.io/qt-5/windows-deployment.html

1.打包过程

使用Qt自带的命令行工具执行windeployqt命令(比QtWidgets打包多了qml路径设置):

windeployqt 程序.exe --qmldir "项目qml文件所在目录" 

一般情况下该拷贝的库也拷贝过去了,可以双击exe运行验证下是否正常。

如果点击exe并不能正常运行,甚至连个响应都没有。通过重定向qDebug输出到文本,可以看到一堆qml的东西没加载。在网上也没有看到靠谱的教程,只能自己折腾了。写了下qt.conf文件配置库路径,并没效果。后来把qt环境里qml文件夹整个copy过来,总算是运行起来了,或许是qml代码里用到的库打包的时候没有被检测到,导致程序启动时加载失败。(2020-3-5补充)有些模块除了需要qml文件夹下的dll,还依赖了bin文件夹下对应的dll,可能需要手动拷贝过来(如QChart,Location,Position之类的),当然懒得找也可以把Qt环境里bin文件夹下release版的dll全copy过来。

注意打包命令出来的Qt5Core.dll和bin目录下那个有点不一样,bin目录下那个带环境绝对路径,自己手动copy的话需要注意下。

 

2.整理下打包目录

由于文件夹和dll太多了,接下来把目录整理下。先把qml文件夹下的带d的debug动态库删了(如果是直接全部copy过来的话),然后把windeploy打包过来的那些原qml目录下的大写Q开头的文件夹删了,原plugins文件夹下的新建个plugins文件夹放置,默认qml和plugins是平级的,所以不用写qt.conf文件指定。(暂时还没找到方法把这些原bin目录下的dll怎么整理到一个文件夹下)

对于qt.conf,参照 https://doc.qt.io/qt-5/qt-conf.html

不过最后应该是要做成安装包的(使用setup factory、inno setup、qt install framework等工具),所以也不用精简这个文件夹目录。

3.VC运行环境

MSVC编译器打包发布的程序可能会遇到提示找不到 vcruntime140.dll(不同MSVC版本对应不同数字编号)。可以通过Dependencies来查找依赖库(链接 https://github.com/lucasg/Dependencies/releases 解压后运行DependenciesGui,对于360可能会报毒),然后将找到的dll放到exe目录里。

也可能会提示丢失MSVCP140.dll,可以用everything搜该dll,然后放到exe目录里(我一般喜欢copy MSVC安装目录下的)。还可以把MSVC目录下的vcredist_x86/x64.exe拿过去安装下,用everything搜这个程序,然后copy出来在客户机安装就行了。)

关注
打赏
1655829268
查看更多评论
立即登录/注册

微信扫码登录

0.1832s