一、简述
今天就简单介绍一下如何给exe加图标,其实很简单,但是主要是为了讲述另一个问题,这也是之前遇到的一个容易忽略的问题。
首先我们了解一下一共有多少个图标可以设置。
看到下面这张图,我们首先会了解到生成的一个exe程序其实对应了三个图标,一个是exe本身的图标,一个是标题栏的图标,还有一个就是任务栏的图标。
不过还有一个隐藏的图标,就是任务栏悬浮窗口的图标。这个只有在任务栏设置中设置为始终隐藏标签时会显示(或者任务栏已满时),也就是应用程序在任务栏只显示图标不显示标题文字情况下,这里任务栏悬浮窗口会多出一个标题栏(见下图)。这样算下来一共四个图标可以设置。
二、如何自定义这些图标
- Qt提供了 setWindowIcon()方法,此方法可以设置标题栏图标、任务栏图标、任务栏悬浮窗口标题栏图标,但是修改不了exe的图标。所以如果需要修改exe 的图标此方法行不通。
this->setWindowIcon(QIcon(":/TestDialog/Resources/icon.jpg"));
- 使用资源文件,新建resource.rc文件在文件中添加如下代码即可。 此方法可以设置以上四个图标的样式。
IDI_ICON1 ICON “icon.ico”
如何添加资源文件
在VS中右键项目->添加->资源(QCreator中类似)
在本地会生成对应的 .rc文件
在 .rc文件中添加 IDI_ICON1 ICON “icon.ico” 即可。
但是此方法只能使用 .ico文件,如果使用jpg等文件会报错。
下面我把上面的icon.ico替换成了icon.jpg,编译报错。
IDI_ICON1 ICON “icon.jpg”
综上:
方法一可以使用多种格式的图片设置图标的样式,但是不能设置exe的图标。
方法二只能使用.ico文件作为图标使用,可以设置以上四个图标。
对于ico文件其实很简单,网上有专门转ico文件的网站。
http://www.easyicon.net/covert/
或者
http://app.xunjiepdf.com/img2icon
注意!!!
好了,上面介绍了两种方法,如果我们两种方法一起用会出现什么情况呢 ???
现在同时使用以上两种方法,但是使用不同的图标,然后看一下效果(见下图).
我们看到setWindowIcon 方法会覆盖 资源文件中设置的icon文件效果。
也就是setWindowIcon优先级高于资源文件中设置的icon文件,这也就是我今天想说的一个重要的点。
之前就是因为代码中同时设置了这两个方法,但是忽略了代码中已经调用了setWindowIcon方法,然后通过修改资源文件中的图标文件,只修改了exe的图标,但是任务栏图标始终修改不了。调试了半天才发现是调用了setWindowIcon会覆盖资源文件中的图标样式。