Qt程序编译完,别人用不了,怎么办?

我们编写了好几个Qt的程序了,每个程序都没有图标,看起来丑丑的。

而且我们编写好的程序,直接将exe拷给别人,在别人的电脑中,根本无法直接运行,辛辛苦苦编写的程序,别人用不了,那也太坑了吧。

今天我们就来解决这两个问题,如果对你有所帮助的话,还请文末点赞支持一下哈。

ICO图标文件

要想给Qt程序添加一个应用程序图标,首先我们要了解一下什么是ICO文件。

ICO是Windows的图标文件格式,图标文件可以存储单个图案、多尺寸、多色板的图标文件。一个图标实际上是多张不同格式的图片的集合体,并且还包含了一定的透明区域。

我们想要获得ICO图标文件,有下面两种方式:

  • ICO素材站点直接下载
  • PNG图片转ICO文件

ICO文件直接下载

搜索引擎搜索 ICO素材  ,我们可以发现很多优秀的素材网站,比如:

https://icon-icons.com/

或者比如图标之家:http://www.icosky.com/

我们以图标之家为例,在进入其主页之后,我们选择一个自己感兴趣的分类:

应用程序图标 分类的网址如下:

http://www.icosky.com/cat/application-icons/

选择一个自己喜欢的图标,点击 .ico(win) 链接,即可得到此图标的.ico文件。

在打开的网页,图片上右键弹出的菜单中,我们选择 图片另存为(V)... 即可保存图标文件素材。

PNG文件转换

ICO文件平时用的还是不多的,如果大家怕上面的ICO文件涉及版权,大家可以使用自己收集或者绘制的PNG文件,利用PNG转ICO工具,将PNG文件转为ICO文件。

推荐一个不错的素材网站——阿里妈妈的矢量图标库:https://www.iconfont.cn/

上面的素材很多,大家可以去上面淘一些自己喜欢的图标素材。

有了PNG格式的素材,我们下一步就是将PNG格式图标转为ICO格式的图标,网上有很多转换工具可以使用,比如:

https://www.aconvert.com/cn/icon/png-to-ico/

这样的网站很多,搜索引擎搜索:PNG转ICO ,随便选择一个即可。

在网站中,选择文件 打开待转换的png文件,选择输出的图标尺寸,一般推荐 48*48 ,然后选择 开始转换 即可,转换完成如下图所示,选择操作下面的 下载图标 即可获取转换之后的图标文件。

修改Qt工程

ICO图标文件我们得到了,那么,怎么给Qt程序添加一个应用程序图标呢?

为了管理素材方便,在工程目录下创建 Images 文件夹存放转换好的ICO图标。

创建Qt资源文件(.qrc文件):

添加图标文件至资源文件中(资源文件中的资源,可以很方便地在代码中对资源进行引用):

注意:刚添加完,可能看不到图标文件,需要重新构建整个项目才行。

在主窗口的ui:mainwindow.ui 属性中,在windowIcon属性中,点击“选择资源”,点击“Images”,再选中资源文件“Logo.ico”,最后点击“OK”。

这种设置方法的结果是,程序主窗口和任务栏已经有了LOGO显示,但是应用程序的exe图标没有改变。

要想让应用程序的exe图标也跟LOGO图标一致,需要在 .pro 文件中新增一行内容:

RC_ICONS = Images/Logo.ico

清理项目,重新编译运行,运行时效果如下:

经过上述步骤,完成了应用程序图标的设置。

注意

经过我的测试,要想加应用程序图标,其实只要在 .pro 文件中设置 RC_ICONS = Images/Logo.ico 即可实现上面最终效果,真是汗了,我上面忙了个寂寞。

我测试的Qt版本为:Qt 5.13.1(MSVC2017,32bit)

打包发布

我们双击编译生成的exe,程序会弹出若干对话框,提示缺少 XXX.dll ,这是因为缺少程序运行依赖的必要的DLL文件。

缺少的文件比较多,而且还涉及到DLL的版本,如果选错了一个,程序也是不能正常运行的,那么有什么办法可以快速的找到缺少的依赖文件呢?

Qt 官方开发环境里自带了一个工具:windeployqt.exe 

我们使用这个工具:windeployqt.exe  ,可以帮助我们快速地找到所有的依赖文件。

首先查看一下,我编译生成的exe使用的编译环境版本:MSVC2017 32bit

在开始菜单,Qt目录下,我们选择的控制台要跟上面的版本一致:

打包动态库

打开上述命令提示行,进入编译后exe所在目录下(新建一个文件夹,拷贝生成的exe至此目录下)。

我们的软件名叫 CommDemo.exe ,在命令行里输入 windeployqt CommDemo.exe,

这样就会把需要的动态库都复制到该软件的目录下。

本机电脑可以运行了:

但是,当我把这个压缩包拷贝到一个刚刚装好的系统上时,程序又不能运行了。

因为我使用的编译方式是 MSVC2017 ,所以还需要一些MSVC的必要的DLL文件。

其实仔细查看刚才的控制台输出,我们忽略了一段话:

warning:Cannot find Visual Studio installation directory,VCINSTALLDIR is not set.

上面已经提示咱们了,没有找到 VS 的安装目录,即没有设置环境变量 VCINSTALLDIR 的值。

所以我们要做的就是设置环境变量 VCINSTALLDIR 的值为VS目录,比如我的VS目录为:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC

 我的电脑(此电脑)-->属性-->系统高级设置-->高级-->环境变量(N)... ,设置系统环境变量为:

然后关闭上面的控制台,再执行一次打包动态库的操作,发现控制台中,不再出现警告信息。

注意

  • 真正发布的时候,建议使用release版本发布,这样整个程序的依赖库体积能大大减小;
  • 如果使用MinGW的方式编译,那么就不需要设置MSVC的环境变量了;
  • 如果上述方法打包的动态库,在别人电脑上,还是缺少某些dll文件,只需要将自己电脑中的对应文件拷贝进去即可,注意dll的版本要对应。

结果展示

有图标的exe文件,在一个新装的纯净Win10系统中,双击可以直接运行,具体效果演示如下:

总结

应用程序有了图标,终于有个程序该有的样子了。

学会了打包动态库的操作,我们也可以把自己编好的程序,分享给小伙伴们使用了。

声明:本内容为作者独立观点,不代表电子星球立场。未经允许不得转载。授权事宜与稿件投诉,请联系:editor@netbroad.com
觉得内容不错的朋友,别忘了一键三连哦!
赞 2
收藏 2
关注 56
成为作者 赚取收益
全部留言
0/200
成为第一个和作者交流的人吧