Setting the Application Icon
The application icon, typically displayed in the top-left corner of an application's top-level windows, is set by calling the QWindow::setIcon() method.
In order to change the icon of the executable application file itself, as it is presented on the desktop (that is, prior to application launch), it is necessary to employ another, platform-dependent technique.
Setting the Application Icon on Windows
First, create an ICO format bitmap file that contains the icon image. This can be done using Microsoft Visual Studio: Select File >> New, and choose the Icon File.
Note: You need not load the application into the Visual Studio IDE as you are using the icon editor only.
Alternatively, an .ico
file can be created from a set of images using ImageMagick's convert tool:
magick.exe convert icon-16.png icon-32.png icon-256.png icon.ico
Store the ICO file in your application's source code directory, for example, with the name appico.ico
.
Using CMake on Windows
To configure your application's icon, a resource file containing information about the icon is required. A resource file is a text file that contains information about the application resources, such as icons, cursors, fonts, and so on. For more information about resource files and what it can contain, see About Resource Files.
Once you have the .rc
file, add information about the ICO file to it and use it to configure your application icon.
The following snippet demonstrates how the Qt Quick Demo - Photo Surface example application uses CMake to set up an application icon:
set(app_icon_resource_windows "${CMAKE_CURRENT_SOURCE_DIR}/resources/photosurface.rc") qt_add_executable(photosurface main.cpp ${app_icon_resource_windows})
Notice that the set
command, defines the app_icon_windows
variable, which contains the path of the RC file. This variable is used with the add_executable
command to set the application's icon.
Using qmake on Windows
If you are still using qmake to generate your makefiles, you need to add a single line to your .pro
project file:
RC_ICONS = myappico.ico
Finally, regenerate your makefile and your application. The .exe
file will now be represented by your icon in Explorer.
However, if you already have an .rc
file, for example, with the name myapp.rc
, which you want to reuse, the following two steps will be required. First, put a single line of text to the myapp.rc
file:
IDI_ICON1 ICON "myappico.ico"
Then, add this line to your myapp.pro
file:
RC_FILE = myapp.rc
If you do not use qmake
, the necessary steps are: first, create an .rc
file and run the rc
or windres
program on the .rc
file, then link your application with the resulting .res
file.
Setting the Application Icon on macOS
The application icon, typically displayed in the application dock area, is set by calling QWindow::setWindowIcon() on a window. It is possible that the program could appear in the application dock area before the function call, in which case a default icon will appear during the bouncing animation.
To ensure that the correct icon appears, both when the application is being launched, and in the Finder, it is necessary to employ a platform-dependent technique.
Although many programs can create icon files (.icns
), the recommended approach is to use the iconutil program supplied by Apple. iconutil is a command-line tool that converts iconset folders to deployment-ready, high-resolution icns files. Using this tool also compresses the resulting icns file, so there is no need for you to perform additional compression.
Using CMake on macOS
To configure the application's icon, the Info.plist
file generated by CMake must contain the icon information. This can be achieved by setting the .icns
file name to the MACOSX_BUNDLE_ICON_FILE
variable.
The following snippet demonstrates how the Qt Quick Demo - Photo Surface example application uses CMake to set up an application icon:
# 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(photosurface MACOSX_BUNDLE main.cpp ${app_icon_macos})
Notice that the first set
command defines the MACOSX_BUNDLE_ICON_FILE
variable, which is required to add the icon file to the Info.plist
file. The second set
command defines the app_icon_macos
variable with the absolute path to the icon file. This variable is then used to configure MACOSX_PACKAGE_LOCATION, which defines the icon file's install location. Finally, the add_executable
uses the app_icon_macOS
variable to set the application's icon.
Using qmake on macOS
If you are still using qmake to generate your makefiles, you only need to add a single line to your .pro
project file. For example, if the name of your icon file is myapp.icns
, and your project file is myapp.pro
, add this line to myapp.pro
:
ICON = myapp.icns
This will ensure that qmake
puts your icons in the proper place and creates an Info.plist
entry for the icon.
If you do not use qmake
, you must do the following manually:
- Create an
Info.plist
file for your application (using thePropertyListEditor
, found inDeveloper/Applications
). - Associate your
.icns
record with theCFBundleIconFile
record in theInfo.plist
file (again, using thePropertyListEditor
). - Copy the
Info.plist
file into your application bundle'sContents
directory. - Copy the
.icns
file into your application bundle'sContents/Resources
directory.
Setting the Application Icon on Common Linux Desktops
In this section we briefly describe the issues involved in providing icons for applications for two common Linux desktop environments: KDE and GNOME. The core technology used to describe application icons is the same for both desktops, and may also apply to others, but there are details which are specific to each. The main source of information on the standards used by these Linux desktops is freedesktop.org. For information on other Linux desktops please refer to the documentation for the desktops you are interested in.
Often, users do not use executable files directly, but instead launch applications by clicking icons on the desktop. These icons are representations of "desktop entry files" that contain a description of the application that includes information about its icon. Both desktop environments are able to retrieve the information in these files, and they use it to generate shortcuts to applications on the desktop, in the start menu, and on the panel.
More information about desktop entry files can be found in the Desktop Entry Specification.
Although desktop entry files can usefully encapsulate the application's details, we still need to store the icons in the conventional location for each desktop environment. A number of locations for icons are given in the Icon Theme Specification.
Although the path used to locate icons depends on the desktop in use, and on its configuration, the directory structure beneath each of these should follow the same pattern: subdirectories are arranged by theme, icon size, and application type. Generally, application icons are added to the hicolor theme, so a square application icon 32 pixels in size would be stored in the hicolor/32x32/apps
directory beneath the icon path.
K Desktop Environment (KDE)
Application icons can be installed for use by all users, or on a per-user basis. A user currently logged into their KDE 4 desktop can discover these locations by using kde4-config, for example, by typing the following in a terminal window:
kde4-config --path icon
Applications using Qt 5 and KDE Frameworks 5 will find their icons in the list returned by this command:
qtpaths --locate-dirs GenericDataLocation icons
Typically, the list of colon-separated paths printed to stdout includes the user-specific icon path and the system-wide path. Beneath these directories, it should be possible to locate and install icons according to the conventions described in the Icon Theme Specification.
If you are developing exclusively for KDE, you may wish to take advantage of the KDE build system to configure your application. This ensures that your icons are installed in the appropriate locations for KDE.
The KDE developer website is at http://techbase.kde.org/.
GNOME
Application icons are stored within a standard system-wide directory containing architecture-independent files. This location can be determined by using gnome-config
, for example by typing the following in a terminal window:
gnome-config --datadir
The path printed on stdout refers to a location that should contain a directory called pixmaps
; the directory structure within the pixmaps
directory is described in the Icon Theme Specification.
If you are developing exclusively for GNOME, you may want to use the standard set of GNU Build Tools. For more information, see the Integration Guidelines section. This ensures that your icons are installed in the appropriate locations for GNOME.
The GNOME developer website, http://developer.gnome.org/, provides more insight into developing applications.