2011-05-31 190 views
2

我正在使用QI的QIcon类来设置我的应用程序的应用程序图标。Qt QIcon SVG不同大小

我的图标是SVG文件,加载得很好。

QIcon appIcon; 
QString iconPath = "share/icons/myapp.svg; 
QFile iconFile(iconPath); 
if (iconFile.exists()) { 
    appIcon.addFile(iconPath); 
} 

QApplication::setWindowIcon(appIcon); 

我的问题是: 我希望有不同pusposes不同的图标。 例如,我想为按下ALT+TAB时标题栏和实际图标显示不同的图标(即大小)。

我发现addFile()QSize参数,但是,然后,图标将坚持一个特定的大小,我不知道(因为不同的窗口管理器可能有不同的标题栏大小)。

如何为标题栏定义一个图标并为其余的定义一个图标(这几乎是我要求的简短版本)?

亲切的问候, mefiX

回答

0

您可以在不同的位置使用一个SVG图标,绘制时就应该进行缩放。但应用程序图标(在ALT + TAB处显示)不同,请参阅文档here

要学习如何将SVG图标转换为ico格式,请看here

+0

有趣的是,[ALT + TAB]中显示的图标是我通过'QApplication :: setWindowIcon()'设置的图标。根据你的说法,我认为这不起作用... – mefiX 2011-05-31 15:51:08

+0

我假设你正在使用MS-Windows(你没有告诉我们)。根据Qt文档(和Fivos的答案),你需要在RC文件中有一个图标,以便Windows资源管理器可以显示一个应用程序图标但可能[ALT + TAB]使用不同的方法来定位图标。 – hmuelner 2011-06-01 08:55:35

2

我通常使用一个单独的PNG图片(16×16像素,例如“./Icons/app_window.png”)使用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的。亲”文件:

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-explorer图标缓存的各种方法的链接: Rebuild icon cache to fix incorrectly displayed icons