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.
Breeze
Breeze is the default Qt style of KDE Plasma. It can be installed with the
breeze
package for Qt5, the
breeze-kde4
AUR
package for Qt4, 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
and either run it from the command line, or log-out and log-in again and go to
System Settings > Appearance > 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.
Adwaita
This article or section is out of date.
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
.
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-qt4
AUR
,
adwaita-qt5
[
broken link
: package not found]
and
adwaita-qt6
[
broken link
: package not found]
packages for the Qt 4, 5 and 6 versions, respectively.
To set the Qt style as default:
~/.config/Trolltech.conf
style=adwaita
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.
Kvantum
Kvantum (
kvantum
) is a customizable SVG-based theme engine for Qt5 that comes with a variety of built-in 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
.
Kvantum is treated as a style instead of a platform theme. To set Kvantum for all qt applications using environment variables, issue
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
QGtkStyle
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
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
style=GTK+
-
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.
QGnomePlatform
This Qt 5 platform theme applies the appearance settings of GNOME for Qt applications. It can be installed with the
qgnomeplatform-qt5
[
broken link
: package not found]
or
qgnomeplatform-qt6
[
broken link
: package not found]
packages or the
qgnomeplatform-qt5-git
AUR
and
qgnomeplatform-qt6-git
AUR
packages for the development version. It does not provide a Qt style itself, instead it requires a
style that support both Qt and GTK
.
This platform theme is enabled automatically in GNOME since version 3.20. For other systems, it can be enabled by setting the following
environment variable
:
QT_QPA_PLATFORMTHEME=gnome
.
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, install
gtk3-nocsd-git
AUR
and restart your window manager to load the updated library path.
You can also run Gtk application with the wrapper:
$ gtk3-nocsd gedit
Improve subpixel rendering of GTK applications under KDE Plasma
See Font configuration#LCD filter.
Consistent file dialog under KDE Plasma
The factual accuracy of this article or section is disputed.
In order to have the same file dialog, one can use XDG Desktop Portals.
Install xdg-desktop-portal and xdg-desktop-portal-kde and set GTK_USE_PORTAL=1
environment variable.
Note that currently 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.
Note: 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-gitAUR 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:
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
Flatpak Qt applications do not use Gnome Adwaita dark theme
If you switched your theme to Adwaita-dark and Flatpak Qt applications still use the light version, install the required KStyle:
# flatpak install flathub org.kde.KStyle.Adwaita
Qt applications run on GNOME Wayland have a non-matching window decoration look, even after setting a Qt theme
In order to have a matching window decoration look, you have to install qgnomeplatform-qt5[broken link: package not found], and set the following environment variable: QT_QPA_PLATFORMTHEME='gnome'
This fix is guaranteed to work with Adwaita or Adwaita-dark.
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-qt. This will offer proper Qt bindings for GTK.
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-lookAUR 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-lookAUR 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
If you are using a Desktop environment other than KDE, or a standalone Window manager, xdg-desktop-portal
might select the wrong backend if more than one are installed on your system. To fix this, set the XDG_CURRENT_DESKTOP=KDE
environment variable in the systemd user session. See XDG Desktop Portal for further details on how Portals are selected.
For the change to take effect, you must then restart the xdg-desktop-portal.service
user unit.