This tutorial is outdated. See Qt 5 and KDE Frameworks applications for a much easier way to snap Qt 5 applications.
This tutorial should only be used when you want to support architectures other than amd64, or for classic snaps.
This guide explains the recommended way to make a qt5 application function correctly inside a snap. These instructions need to be applied in addition to the instructions for creating a snap in your programming language. For example, if your application uses the C programming language and Qt5, you also need to follow the instructions for snapping a C/C++ application.
The Snapcraft Desktop Helpers project provides the desktop-qt5 part to include the Qt5 dependencies in your snap. It also includes the desktop-launch script to initialise the desktop-specific functionality before your application launches.
Copy the definition of the desktop-qt5 part from the Snapcraft Desktop Helpers snapcraft.yaml into your Snapcraft recipe, in the parts section. Change the source property of this part to https://github.com/ubuntu/snapcraft-desktop-helpers.git.
# This part installs the qt5 dependencies and a `desktop-launch` script to initialise
# desktop-specific features such as fonts, themes and the XDG environment.
#
# It is copied straight from the snapcraft desktop helpers project. Please periodically
# check the source for updates and copy the changes.
# https://github.com/ubuntu/snapcraft-desktop-helpers/blob/master/snapcraft.yaml
#
desktop-qt5:
source: https://github.com/ubuntu/snapcraft-desktop-helpers.git
source-subdir: qt
...
<copy the rest of this part from the desktop helpers snapcraft.yaml>
...
NOTE: In order to keep the integration up-to-date for the best user experience, you should check if the definition in the Snapcraft desktop helpers repo has been changed periodically.
Insert bin/desktop-launch into the app’s command chain.
apps:
qt5app:
command: bin/desktop-launch qt5app
If you’re using the full adapter, insert the bin/desktop-launch launcher into the list of the command-chain key of the apps._app_name_ property instead:
apps:
qt5app:
adapter: full
command: bin/qt5app
command-chain:
- bin/desktop-launch
NOTE: If your application requires recent Qt or KDE libraries that aren’t available from Ubuntu LTS, the
kde-frameworkscontent and SDK snaps might be useful. Please take a look at KDE Snap Guide to see how to use this SDK. This SDK only supports the AMD64 processor architecture.
Snapped Qt applications by default don’t use the UI theme of the operating system they are running on. You can make your snapped application adapt to most common UI themes using the gtk-common-themes content snap and the gtk3 Qt Platform theme.
Add the following qt5-gtk-platform part into the parts section of your snapcraft.yaml file.
qt5-gtk-platform:
plugin: nil
stage-packages:
- qt5-gtk-platformtheme
In the apps._app_name_ stanza, merge the following environment property:
apps:
qt5app:
environment:
# Use GTK3 cursor theme, icon theme and open/save file dialogs.
QT_QPA_PLATFORMTHEME: gtk3
In the plugs stanza, add the following plug definition:
plugs:
# Support for common GTK themes
# https://forum.snapcraft.io/t/how-to-use-the-system-gtk-theme-via-the-gtk-common-themes-snap/6235
gsettings:
gtk-3-themes:
interface: content
target: $SNAP/data-dir/themes
default-provider: gtk-common-themes
icon-themes:
interface: content
target: $SNAP/data-dir/icons
default-provider: gtk-common-themes
sound-themes:
interface: content
target: $SNAP/data-dir/sounds
default-provider: gtk-common-themes
Now your applications will use the icon theme, cursor theme and open/save file dialogs of the desktop it runs on. The colors of your applications will also adapt to the GTK theme colors of the operating system.
You can take a look at the snapcraft.yaml file of keepassxc for a complete example of a qt5 snap.
Last updated 5 years ago.