Uniform look for Qt and GTK applications

Related articles
GTK
Qt
Qt
and
GTK
based programs both use a different widget toolkit to render the graphical user interface. Each come with different themes, styles and icon sets by default, among other things, so the "look and feel" differ significantly. This article will help you make your Qt and GTK applications look similar for a more streamlined and integrated desktop experience.
Overview
To get a similar look between the toolkits, you will most likely have to modify the following:
Theme
: The custom appearance of an application, widget set, etc. It usually consists of a style, an icon theme and a color theme.
Style
: The graphical layout and look of the widget set.
Icon Theme
: A set of global icons.
Color Theme
: A set of global colors that are used in conjunction with the style.
You can choose various approaches:
Modify
GTK and Qt styles
separately with the tools listed below for each toolkit and aim for choosing similarly looking themes (style, colors, icons, cursors, fonts).
Use a special
theme engine
, which intermediates the modification of the other graphical toolkit to match your main toolkit.
Styles for both Qt and GTK
There are widget style sets available for the purpose of integration, where builds are written and provided for both Qt and GTK, all major versions included. With these, you can have one look for all applications regardless of the toolkit they had been written with.
Tip
You may want to apply user defined styles to root applications, see
GTK#Theme not applied to root applications
and
Qt#Theme not applied to root applications
.
Note
Since version 3.16, GTK 3
does not support
non-CSS themes, hence previous solutions such as Oxygen-Gtk are
no longer viable
options.
GTK ports of Qt themes
These are themes originally created for a Qt environment, but was later ported to GTK.
Breeze
Breeze is the default Qt style of KDE Plasma. It can be installed with the
breeze
package and the
breeze-gtk
package for GTK 2 and GTK 3.
Once installed, you can use one of the many
GTK configuration tools
to change the GTK theme.
If running KDE Plasma, install
kde-gtk-config
, log-out and log-in again, and then go to
System Settings > Colors & Themes > Application Style  > Configure GNOME/GTK Application Style…
. Fonts, icon themes, cursors, and widget styles set in System Settings affect GTK settings automatically; only the GTK theme should be set manually using the previously mentioned module.
If you are not running KDE Plasma, you can use
qt5ct-kde
AUR
and
qt6ct-kde
AUR
to apply breeze to qt applications, you can also change the color scheme to be Breeze-Dark.
Qt ports of GTK themes
These are themes originally created for a GTK environment, but was later ported to Qt.
Adwaita
This article or section is out of date.
Reason:
Adwaita-qt project is unmaintained and no longer actively developed.
[1]
(Discuss in
Talk:Uniform look for Qt and GTK applications
)
Adwaita is the default GNOME theme. The GTK 3 version is included in the
gtk3
package, while the GTK 2 version is in
gnome-themes-extra-gtk2
AUR
.
adwaita-qt
is a Qt port of the Adwaita theme. Unlike
#QGtkStyle
, which mimics the GTK 2 theme, it provides a native Qt style made to look like the GTK 3 Adwaita. It can be
installed
with the
adwaita-qt5-git
AUR
and
adwaita-qt6-git
AUR
packages for the Qt 5 and 6 respectively.
To set the Qt style, set the following
environment variable
:
QT_STYLE_OVERRIDE=adwaita
. Alternatively, use
qt5ct
package. For more detailed instructions, see
Qt#Configuration of Qt 5/6 applications under environments other than KDE Plasma
.
GTK themes ported to Kvantum
Kvantum (
kvantum
) is an SVG-based style customizer for Qt6 that comes with a variety of built-in or external styles, including versions of some of popular GTK themes such as Adapta, Arc, Ambiance,
Libadwaita
and
Materia
. More themes can be found
on the KDE Store
. For Qt5 you additionally need the
kvantum-qt5
package.
Kvantum works as a Qt style instead of a Qt platform theme. To set Kvantum for all Qt applications, set it in
qt6ct
for Qt6 or
qt5ct
for Qt5 respectively, or use the environment variable
QT_STYLE_OVERRIDE=kvantum
.
Theme configuration
To
configure a theme variant
for Kvantum, such as
KvLibadwaita
, edit the configuration file:
/etc/xdg/Kvantum/kvantum.kvconfig (or ~/.config/Kvantum/kvantum.kvconfig)
...
theme=KvLibadwaita
...
or use the
kvantummanager
GUI.
Theme engines
A
theme engine
can be thought of as a thin layer API which translates themes (excluding icons) between one or more toolkits. These engines add some extra code in the process and it is arguable that this kind of a solution is not as elegant and optimal as using native styles.
QGtk3Style
This is a platform theme built into
qt5-base
starting with version 5.7.0
[2]
and
qt6-base
. It can be used to style Qt5 and Qt6 applications according to current GTK3 style. It can be enabled by setting the following
environment variable
:
QT_QPA_PLATFORMTHEME=gtk3
. For users of Adwaita it can be used together with
#QAdwaitaDecorations
for a complete look.
QGtkStyle
Note
QGtkStyle has been removed from
qt5-base
5.7.0
[3]
and added to
qt5-styleplugins
AUR
[4]
Warning
Depending on GTK 2 theme, this style may cause rendering issues such as transparent fonts or inconsistent widgets.
This Qt style uses GTK 2 to render all components to blend in with
GNOME
and similar GTK based environments. Beginning with Qt 4.5, this style is included in Qt. It requires
gtk2
AUR
to be installed and configured.
This is the default Qt4 style in Cinnamon, GNOME and Xfce, and the default Qt5 style in Cinnamon, GNOME, MATE, LXDE and Xfce. In other environments:
For Qt4, it can be enabled with
Qt Configuration
(
qtconfig-qt4
), choose
GTK
under
Appearance > GUI Style
. Alternatively, edit the
/etc/xdg/Trolltech.conf
(system-wide) or
~/.config/Trolltech.conf
(user-specific) file:
~/.config/Trolltech.conf
...
[Qt]
style=GTK+
...
For Qt 5, it can be enabled by installing
qt5-styleplugins
AUR
and setting the following
environment variable
:
QT_QPA_PLATFORMTHEME=gtk2
For Qt 6, it can be enabled by installing
qt6gtk2
AUR
and choosing the
qt6gtk2
style in
qt6ct
, or alternatively setting the following environment variable:
QT_QPA_PLATFORMTHEME=gtk2
For full uniformity, make sure that the configured
GTK theme
supports both GTK 2 and GTK 3. If your preferred theme has inconsistent rendering after configuring Qt to use GTK2, install
gtk-theme-switch2
AUR
and choose a theme. You should also make sure that the preferred theme is installed in
/usr/share/themes
as
$XDG_DATA_HOME/themes
directory is not being scanned for active GTK 2 theme.
QAdwaitaDecorations
QAdwaitaDecorations is Qt decoration plugin implementing Adwaita-like client-side decorations for
Wayland
. It can be installed with the
qadwaitadecorations-qt5
AUR
and
qadwaitadecorations-qt6
AUR
packages. After installing, set
QT_WAYLAND_DECORATION=adwaita
to environment variable.
QWhiteSurGtkDecorations
QWhiteSurGtkDecorations is Qt decoration plugin implementing WhiteSur-gtk-like client-side decorations for
Wayland
. It can be installed with the
qwhitesurgtkdecorations-qt5
AUR
and
qwhitesurgtkdecorations-qt6
AUR
packages. After installing, set
QT_WAYLAND_DECORATION=whitesur-gtk
to environment variable.
Tips and tricks
Using a GTK icon theme in Qt applications
If you are running
Plasma
, run
kde-gtk-config
and select the icon-theme under
System Settings > Application Style > GTK
.
If you are using
GNOME
, run
dconf-editor
and change the
icon-theme
key under
org > gnome > desktop > interface
to your preferred icon theme.
If you are not using a
desktop environment
, for example if you are running a minimal system with
i3-wm
,
install
dconf-editor
and set the icon-theme as explained above. 
You might also have to set the value of
DESKTOP_SESSION
in your profile. See
Environment variables#Defining variables
for the possible ways to obtain the desired result.
Note
If the icon theme was not applied, you might want to check if the name that you entered of your preferred theme, was in the correct format. For example, if you want to apply the currently active icon theme to your Qt applications, you can find the correct format of its name with the command:
$ awk -F= '/icon-theme/ {print $2}' ~/.gtkrc-2.0
Add Title bar and frame to GTK3 applications under KDE Plasma
To have GNOME/GTK applications display with a KDE/Plasma title bar and frame, disable client-side decorations as described in
GTK#Client-side decorations
.
Improve subpixel rendering of GTK applications under KDE Plasma
See
Font configuration#LCD filter
.
Consistent file dialog under KDE Plasma
To have the same file dialog across applications in KDE Plasma, you can use
XDG Desktop Portals
.
Install
xdg-desktop-portal
and
xdg-desktop-portal-kde
as a first step.
Environment variable method
Historically, setting the environment variable
GTK_USE_PORTAL=1
was sufficient for most applications. Some newer GTK applications may use
GDK_DEBUG=portals
instead (see
GTK NEWS
), while others (like
Betterbird
128.5.2esr-bb19, as noted in the
discussion
) still require the original variable. You may need to test which variable works with your specific applications, or use both to ensure maximum compatibility.
Configuration method
This article or section needs language, wiki syntax or style improvements. See
Help:Style
for reference.
Reason:
Use
Template:ic
,
Template:bc
,
Template:hc
where applicable. See
Help:Style#systemd units operations
. (Discuss in
Talk:Uniform look for Qt and GTK applications
)
Since
xdg-desktop-portal
1.18.0, direct configuration of the portal system is recommended.
Set the preferred portal backend
This can be configured per-user or system-wide.
User-specific configuration
Create the configuration directory:
$ mkdir -p ~/.config/xdg-desktop-portal/
Append the following to
~/.config/xdg-desktop-portal/portals.conf
:
[preferred]
default=kde
org.freedesktop.impl.portal.FileChooser=kde
System-wide configuration
As root, create the directory:
# mkdir -p /etc/xdg/xdg-desktop-portal/
Create the file
/etc/xdg/xdg-desktop-portal/portals.conf
with the following content:
[preferred]
default=kde
org.freedesktop.impl.portal.FileChooser=kde
Force the desktop environment for the portal service
This ensures that the portal service uses the correct backend, regardless of the current desktop environment.
User-specific configuration
Create the override directory:
$ mkdir -p ~/.config/systemd/user/xdg-desktop-portal.service.d/
Append the following to
~/.config/systemd/user/xdg-desktop-portal.service.d/override.conf
:
[Service]
Environment="XDG_CURRENT_DESKTOP=KDE"
System-wide configuration
As root, create the directory:
# mkdir -p /etc/systemd/user/xdg-desktop-portal.service.d/
Create the file
/etc/systemd/user/xdg-desktop-portal.service.d/override.conf
with the following content:
[Service]
Environment="XDG_CURRENT_DESKTOP=KDE"
Restart the portal service
Reload the systemd user daemon and restart the portal service:
$ systemctl --user daemon-reload
$ systemctl --user restart xdg-desktop-portal.service
This configuration method is independent of the current desktop environment and is considered more robust against future changes than relying solely on environment variables.
Application compatibility
Not all GTK applications support KDE file dialogs correctly:
Applications using electron should use at least electron 14 (see
#19159
) and properly implement this function.
VSCode
has a pull request for fixing a problem, see
#126113
.
GIMP
has not implemented use of the portal yet, see
bug report
.
Synchronizing bookmarks
There are still lots of GTK applications that do not implement portal properly (abandoned applications, or authors are focused on other tasks). To simplify file picking from such applications, you can at least synchronize bookmarks from dolphin to nautilus. Use this command:
$ awk -F\" '/<bookmark href="file/ {print $2}' < $HOME/.local/share/user-places.xbel > $HOME/.config/gtk-3.0/bookmarks
Alternatively, use
bookmarksync-git
AUR
for that purpose. There you can manually edit and sync bookmarks to both sides.
Application-specific settings
In addition to the environment variable approach, some GTK applications have their own settings for forcing use of XDG Portals:
Firefox
— See
Firefox#XDG Desktop Portal integration
Troubleshooting
Themes not working in GTK applications
If the style or theme engine you set up is not showing in your GTK applications then it is likely your GTK settings files are not being loaded for some reason. You can check where your system expects to find these files by doing the following:
$ export | grep gtk
Usually the expected files should be
~/.gtkrc
for GTK1 and
~/.gtkrc2.0
or
~/.gtkrc2.0-kde
for GTK 2.x.
GTK applications do not use svg (breeze) icons after system upgrade
Try to run this to fix this issue:
# gdk-pixbuf-query-loaders --update-cache
GTK applications do not fully use KDE system settings
To further integrate
Plasma
settings on GTK applications, one may want to
install
gnome-settings-daemon
,
gsettings-desktop-schemas
and
gsettings-qt5
. This will offer proper Qt bindings for GTK.
kde-gtk-config "System Settings > Application Style > GTK" menu missing
When
kde-gtk-config
breaks and the "Application Style > GTK" menu is missing from System Settings, it is possible to choose
GTK configuration tools
like
lxappearance
and
nwg-look
to be able to configure GTK 2 and GTK 3 styles.
lxappearance
is desktop independent even if it comes from the LXDE project (it does not require other parts of the LXDE desktop).
nwg-look
is a GTK3 settings editor, designed to work properly in wlroots-based Wayland environment. The look and feel is strongly influenced by LXAppearance, but nwg-look is intended to free the user from a few inconveniences.
Dolphin theming does not match Nautilus well
Check the section
Mismatched folder view background colors
for how to deal with weird coloring.
The KDE Plasma XDG Desktop Portal is not being used
Follow
XDG Desktop Portal#Force desktop environment
with
XDG_CURRENT_DESKTOP=KDE
.
Qt5: kvantum is not available as a style in the Qt settings app
Be sure to have
kvantum-qt5
installed.
QT_QPA_PLATFORMTHEME=kde does not style kde portal
Make sure that
QT_QPA_PLATFORMTHEME=kde
is set for systemd services. Since the
KDE
portal is started by systemd through a dbus call
[5]
you can use the following configuration for setting this variable to a
Wayland
session:
~/.config/environment.d/envvars.conf
QT_QPA_PLATFORMTHEME=kde