Qt QIcon SVG 不同大小

3
我正在使用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参数,但是这样,图标会固定在某个特定的大小上,而我不知道它是什么(因为不同的窗口管理器可能有不同的标题栏大小)。
我如何定义一个标题栏图标和一个其余部分的图标(这就是我所问的简短版本)?
此致, mefiX
2个回答

2
通常我会使用一个单独的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资源管理器的图标缓存,图标并不总是正确显示的。 以下是一个链接,其中包含清除/重建Windows资源管理器图标缓存的各种方法: 重新构建图标缓存以修复错误显示的图标


0

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

要了解如何将SVG图标转换为ico格式,请看这里


有趣的是,在 [ALT+TAB] 中显示的图标是我通过 QApplication::setWindowIcon() 设置的图标。根据您的说法,我本来以为这不起作用… - mefiX
我假设你正在使用MS-Windows(你没有告诉我们)。根据Qt文档(以及Fivos的答案),你需要在RC文件中添加一个图标,这样Windows资源管理器才能显示应用程序图标。但是也许[ALT+TAB]使用了另一种定位图标的方法。 - hmuelner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接