问题描述
我正在使用Qt的QIcon类来设置我的应用程序的应用程序图标。
我的图标是SVG文件,可以正常加载。
QIcon appIcon;
QString iconPath = \"share/icons/myapp.svg;
QFile iconFile(iconPath);
if (iconFile.exists()) {
appIcon.addFile(iconPath);
}
QApplication::setwindowIcon(appIcon);
我的问题是:
我想针对不同的目的使用不同的图标。
例如,我想在标题栏和实际图标上使用不同的图标(即大小),按ALT+TAB
时会显示出来。
我找到了addFile()
的QSize
参数,但随后该图标将停留在一个特定的大小,我不知道(因为不同的窗口管理器可能具有不同的标题栏大小)。
如何为标题栏定义一个图标,为其余图标定义一个(这几乎是我要问的简短版本)?
亲切的问候,
墨菲
解决方法
我通常使用一个单独的PNG图像(16x16像素,例如\“ ./ Icons / app_window.png \”)在我的mainwindow类构造函数中使用setWindowIcon()函数来设置标题栏图标:
this->setWindowIcon(QIcon(QLatin1String(\":/Images/Icons/app_window.png\")));
对于其余的图标,您可以使用以下出色的免费软件应用程序:
http://www.icofx.ro/
它允许您创建\“ myapp.ico \”文件(对于MS-Windows)和\\“ myapp.icns \”文件(对于Mac OSX),并且如果您从256x256图像开始,它可以自动创建所有图标尺寸适合您!
对于Mac OS / X,必须将以下行放入\“ MyApp.pro \”文件中:
ICON = Icons/myapp.icns
对于MS-Windows,必须将以下行放入\“ MyApp.pro \”文件中:
win32::RC_FILE = myapp.rc
并且还必须创建一个如下所示的\“ myapp.rc \”文件:
IDI_ICON1 ICON DISCARDABLE \"./Icons/myapp.ico\"
#include <windows.h>
#include \"MyAppVersion.h\"
VS_VERSION_INFO VERSIONINFO
FILEVERSION VER_FILEVERSION
PRODUCTVERSION VER_PRODUCTVERSION
BEGIN
BLOCK \"StringFileInfo\"
BEGIN
BLOCK \"040904E4\"
BEGIN
VALUE \"CompanyName\",VER_COMPANYNAME_STR
VALUE \"FileDescription\",VER_FILEDESCRIPTION_STR
VALUE \"FileVersion\",VER_FILEVERSION_STR
VALUE \"InternalName\",VER_INTERNALNAME_STR
VALUE \"LegalCopyright\",VER_LEGALCOPYRIGHT_STR
VALUE \"LegalTrademarks1\",VER_LEGALTRADEMARKS1_STR
VALUE \"LegalTrademarks2\",VER_LEGALTRADEMARKS2_STR
VALUE \"OriginalFilename\",VER_ORIGINALFILENAME_STR
VALUE \"ProductName\",VER_PRODUCTNAME_STR
VALUE \"ProductVersion\",VER_PRODUCTVERSION_STR
END
END
BLOCK \"VarFileInfo\"
BEGIN
VALUE \"Translation\",0x409,1252
END
END
#include \“ MyAppVersion.h \”和其余选项是当然的,但是您可以使用它来定义所有VER_xxx常量,而不用直接将它们作为常量字符串(例如\“ MyAppName \”)放置。图标定义的唯一重要一行是第一行:
IDI_ICON1 ICON DISCARDABLE \"./Icons/myapp.ico\"
这意味着文件\“ MyApp.ico \”驻留在文件夹./Icons/中。
还要注意,在MS-Windows上,如果修改\“ myapp.ico \”文件,重新生成项目并再次运行应用程序,则由于Windows-explorer的图标缓存,该图标并非总是正确显示。
这是具有各种清除/重建Windows资源管理器图标高速缓存的方法的链接:
重建图标缓存以修复错误显示的图标
, 您可以在不同位置使用一个SVG图标,绘制时应缩放比例。但是应用程序图标(在ALT + TAB处显示)有所不同,请参见此处的文档。
要了解如何将SVG图标转换为ico格式,请参见此处。