2011-05-31 204 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