设置应用程序图标链接到本节

如何设置您的应用程序图标。

应用程序图标,通常显示在应用程序顶级窗口的左上角,可以通过调用QWindow::setIcon()方法进行设置。

为了更改可执行应用程序文件自身的图标,即它在桌面上显示的图标(即在应用程序启动之前),需要采用另一种平台相关的技术。

在Windows上设置应用程序图标链接到本节

首先,创建一个包含图标图像的ICO格式位图文件。这可以通过使用Microsoft Visual Studio来实现:选择文件 >> 新建,然后选择图标文件。

注意

您不需要将应用程序加载到Visual Studio IDE中,因为您只使用图标编辑器。

或者,可以使用ImageMagick的convert工具从一组图像中创建一个.ico文件

magick.exe convert icon-16.png icon-32.png icon-256.png icon.ico

将ICO文件存储在您的应用程序源代码目录中,例如,文件名为appico.ico

在Windows上使用CMake链接到本节

要配置您应用程序的图标,需要一个包含图标信息的资源文件。资源文件是一个文本文件,其中包含有关应用程序资源的信息,例如图标、光标、字体等。有关资源文件及其包含内容的信息,请参阅关于资源文件

一旦您有了.rc文件,请向其中添加有关ICO文件的信息,然后使用它来配置应用程序图标。

以下代码示例演示了Photo Surface示例应用程序如何使用CMake设置应用程序图标

set(app_icon_resource_windows "${CMAKE_CURRENT_SOURCE_DIR}/resources/photosurface.rc")
qt_add_executable(photosurfaceexample main.cpp ${app_icon_resource_windows})

请注意,set命令定义了app_icon_windows变量,它包含RC文件的路径。此变量与add_executable命令一起使用,以设置应用程序的图标。

在Windows上使用qmake链接到本节

如果您仍在使用qmake来生成您的makefiles,您需要向您的.pro项目文件中添加一行

RC_ICONS = myappico.ico

最后,重新生成您的makefile和您的应用程序。现在,.exe文件将由您的图标在资源管理器中表示。

但是,如果您已经有一个.rc文件,例如,名为myapp.rc的文件,您想重新使用,则需要以下两个步骤。首先,将一行文本添加到myapp.rc文件中

IDI_ICON1               ICON    "myappico.ico"

然后,将以下行添加到您的 myapp.pro 文件中

RC_FILE = myapp.rc

如果您不使用 qmake,必要的步骤是:首先,创建一个 .rc 文件,然后在 .rc 文件上运行 rcwindres 程序,最后将您的应用程序与应用得的 .res 文件链接。

在 macOS 中设置应用程序图标#

应用程序图标通常显示在应用坞区域,通过在窗口上调用 QWindow::setWindowIcon() 来设置。程序在调用函数之前可能会出现在应用坞区域中,在这种情况下,在弹跳动画期间将出现默认图标。

要确保在应用程序启动和在 Finder 中都能显示正确的图标,有必要使用平台相关的技术。

尽管许多程序可以创建图标文件(.icns),但建议使用 Apple 提供的 iconutil 程序。 iconutil 是一个命令行工具,可将图标集文件夹转换为可用于部署的高分辨率 icns 文件。使用此工具还可以压缩生成的 icns 文件,因此不需要您再进行额外的压缩。

在 macOS 上使用 CMake#

为了配置应用程序的图标,CMake 生成的 Info.plist 文件必须包含图标信息。这可以通过将 .icns 文件名设置到 MACOSX_BUNDLE_ICON_FILE 变量来实现。

以下代码示例演示了Photo Surface示例应用程序如何使用CMake设置应用程序图标

# The MACOSX_BUNDLE_ICON_FILE variable is added to the Info.plist
# generated by CMake. This variable contains the .icns file name,
# without the path.
set(MACOSX_BUNDLE_ICON_FILE photosurface.icns)

# And the following tells CMake where to find and install the file itself.
set(app_icon_macos "${CMAKE_CURRENT_SOURCE_DIR}/resources/photosurface.icns")
set_source_files_properties(${app_icon_macos} PROPERTIES
       MACOSX_PACKAGE_LOCATION "Resources")

qt_add_executable(photosurfaceexample MACOSX_BUNDLE main.cpp ${app_icon_macos})

请注意,第一个 set 命令定义了 MACOSX_BUNDLE_ICON_FILE 变量,这是将图标文件添加到 Info.plist 文件所需的。第二个 set 命令定义了具有图标文件绝对路径的 app_icon_macos 变量。然后使用此变量配置 MACOSX_PACKAGE_LOCATION,它定义了图标文件的安装位置。最后,add_executable 使用 app_icon_macOS 变量来设置应用程序的图标。

在 macOS 上使用 qmake#

如果您仍在使用 qmake 生成您的 makefiles,您只需在您的 .pro 项目文件中添加一行即可。例如,如果您的图标文件名为 myapp.icns,并且您的项目文件名为 myapp.pro,则需要将此行添加到 myapp.pro

ICON = myapp.icns

这将确保 qmake 将您的图标放在正确的位置,并为图标创建一个 Info.plist 条目。

如果您不使用 qmake,您必须手动执行以下操作

  1. 为您的应用程序创建一个 Info.plist 文件(使用可在 Developer/Applications 中找到的 PropertyListEditor)。

  2. 将您的 .icns 记录与 Info.plist 文件中的 CFBundleIconFile 记录关联(再次使用 PropertyListEditor)。

  3. Info.plist 文件复制到您的应用程序包的 Contents 目录中。

  4. .icns 文件复制到您的应用程序包的 Contents/Resources 目录中。

在常见 Linux 桌面中设置应用程序图标#

在本节中,我们简要描述了为两个常见的 Linux 桌面环境(KDE 和 GNOME)的应用程序提供图标所涉及的问题。这两个桌面都使用了相同的核心技术来描述应用程序图标,也可能适用于其他环境,但每个环境都有特定的细节。有关这些 Linux 桌面使用的标准的更多信息,请参阅 freesdesktop.org。有关其他 Linux 桌面信息,请参阅您感兴趣桌面的文档。

通常,用户不直接使用可执行文件,而是通过点击桌面上的图标来启动应用程序。这些图标是 "桌面入口文件" 的表示,其中包含对应用程序的描述,包括其图标的信息。这两个桌面环境都能检索这些文件中的信息,并使用这些信息在桌面、开始菜单和面板上生成应用程序的快捷方式。

有关桌面入口文件的更多信息,请参阅桌面入口规范

尽管桌面入口文件可以有用地封装应用程序的详细信息,但我们仍然需要将图标存储在每种桌面环境传统的位置。在 图标主题规范 中给出了一组图标位置。

尽管用于定位图标的路径取决于所使用的桌面及其配置,但在每个这些下面应该遵循相同的模式:子目录按主题、图标大小和应用程序类型排列。通常,应用程序图标添加到 hicolor 主题中,因此一个32像素大小的正方形应用程序图标将存储在图标路径下的 hicolor/32x32/apps 目录中。

K 桌面环境 (KDE)#

可以为所有用户或逐用户安装应用程序图标。当前登录到他们的 KDE 4 桌面的用户可以通过使用 kde4-config 来发现这些位置,例如,在终端窗口中键入以下内容

kde4-config --path icon

使用 Qt 5 和 KDE Frameworks 5 的应用程序将在由该命令返回的列表中找到它们的图标

qtpaths --locate-dirs GenericDataLocation icons

通常,输送到标准输出的冒号分隔路径列表包括用户特定图标路径和全局路径。在这些目录下,应该可以按照 图标主题规范 中描述的约定查找和安装图标。

如果您专门为 KDE 开发,您可能希望利用 KDE 构建系统 来配置您的应用程序。这确保了您的图标在适当的 KDE 位置安装。

KDE 开发者网站地址为 http://techbase.kde.org/

GNOME#

应用程序图标存储在包含体系结构无关文件的通用系统目录中。该位置可以通过使用gnome-config确定,例如,在终端窗口中输入以下内容:

gnome-config --datadir

打印在stdout上的路径指的是应包含名为pixmaps的目录的位置;在pixmaps目录内的目录结构在图标主题规范中有描述。

如果你专门为GNOME开发,你可能想使用标准的GNU构建工具集。更多信息,请参阅集成指南部分。这可以确保你的图标被安装到适合GNOME的位置。

GNOME开发者网站http://developer.gnome.org/提供了更多关于应用程序开发的深入了解。