Difference between revisions of "Uniform look for Qt and GTK applications"

From ArchWiki
Jump to: navigation, search
(rearanged libgnomeui and added a further note)
m (Using a GTK+ icon theme in Qt apps: fix name)
 
(123 intermediate revisions by 40 users not shown)
Line 1: Line 1:
[[Category:Desktop environments]]
+
[[Category:Widget toolkits]]
 
[[Category:Eye candy]]
 
[[Category:Eye candy]]
[[es:Uniform Look for Qt and GTK Applications]]
+
[[es:Uniform look for Qt and GTK applications]]
[[it:Uniform Look for Qt and GTK Applications]]
+
[[it:Uniform look for Qt and GTK applications]]
[[ru:Uniform Look for Qt and GTK Applications]]
+
[[ja:Qt と GTK アプリケーションの外観の統合]]
[[uk:Uniform Look for Qt and GTK Applications]]
+
[[ru:Uniform look for Qt and GTK applications]]
[[zh-CN:Uniform Look for Qt and GTK Applications]]
+
[[uk:Uniform look for Qt and GTK applications]]
{{Article summary start}}
+
[[zh-cn:Uniform look for Qt and GTK applications]]
{{Article summary text|This articles details theme configuration of GTK+ at Qt applications to ensure a uniform style. This article will cover configuration, theme engines, tricks and troubleshooting.}}
+
{{Related articles start}}
{{Article summary heading|Related}}
+
{{Related|GTK+}}
{{Article summary wiki|GTK+}}
+
{{Related|Qt}}
{{Article summary wiki|Qt}}
+
{{Related articles end}}
{{Article summary end}}
+
 
+
 
[[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.
 
[[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.
  
To get a similar look between the two you will most likely have to modify the following:
+
== 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.
 
* '''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.
 
* '''Style''': The graphical layout and look of the widget set.
Line 22: Line 22:
  
 
You can choose various approaches:
 
You can choose various approaches:
 
+
* Modify [[#Styles for both Qt and GTK+|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).
* Modify [[Uniform Look for QT and GTK Applications#Styles for both Qt and GTK+|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 engines|theme engine]], which intermediates the modification of the other graphical toolkit to match your main toolkit.
* Use a special [[Uniform Look for QT and GTK Applications#Theme Engines|theme engine]], which intermediates the modification of the other graphical toolkit to match your main toolkit:
+
** if you work in KDE 4 desktop environment then a GTK-Qt engine is available, which updates GTK+ configuration files automatically so that GTK+ appearance is similar to the Qt one;
+
** if you work in other desktop environments, you can choose the QGtkStyle engine (built in Qt), which forces Qt apps to use your GTK+ 2.x theme.
+
 
+
Should you use also GTK+ 3.x toolkit, follow the [[GTK+#GTK+ 3.x|GTK+ 3.x]] wiki article to find out how to make it look similar to GTK+ 2.x themes.
+
  
 
== Styles for both Qt and GTK+ ==
 
== 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.
 
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.
  
=== KDE4 Oxygen ===
+
{{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|1=Since version 3.16, GTK+ 3 [https://bbs.archlinux.org/viewtopic.php?pid=1518404#p1518404 does not support] non-CSS themes, hence previous solutions such as Oxygen-Gtk are [https://bugs.kde.org/show_bug.cgi?id=340288 no longer viable] options.}}
  
[http://www.oxygen-icons.org/ Oxygen] is a Qt style that comes by default with KDE4. There are various ways of mimicking its appearance that are discribed below.
+
=== Breeze ===
  
==== oxygen-gtk ====
+
Breeze is the default Qt style of KDE Plasma. It can be installed with the {{Pkg|breeze}} package for Qt5, the {{Pkg|breeze-kde4}} package for Qt4, and the {{Pkg|breeze-gtk}} package for GTK+ 2 and GTK+ 3.
[http://kde-look.org/content/show.php/?content=136216 oxygen-gtk] is a port of the Oxygen Qt Style to GTK+ done by the Oxygen developers. Unlike other attempts, it is a native GTK+ style that does not depend on Qt (via some Qt to GTK+ conversion engine) nor does it render widget appearances via hard coded pixmaps. The style has the primary goal to ensure visual consistency between GTK+ 2.x/3.x and Qt-based applications running under KDE with a secondary objective to also have a standalone, nice looking GTK+ theme that behaves well in other desktop environments.
+
  
The style has GTK+ 2.x and GTK+ 3.x variants which can be [[Pacman|installed]] with the {{Pkg|oxygen-gtk2}} or {{Pkg|oxygen-gtk3}} packages, available in the [[official repositories]].
+
Once installed, you can use one of the many [[GTK+#Configuration tools|GTK+ configuration tools]] to change the GTK+ theme.
  
{{Note|Before KDE 4.10, you needed to create the file {{ic|~/.kde4/share/config/gtkrc-2.0}}, or let it automatically create like described below. But that is actually counter-productive with KDE 4.10’s oxygen-gtk, and you should delete this file after upgrading to prevent it from messing with your colors. Cleanup-removal of {{ic|~/.kde4/share/config/gtkrc}} might be necessary, too}}
+
=== Adwaita ===
  
===== Automatic procedure =====
+
Adwaita is the default GNOME theme. The GTK+ 3 version is included in the {{Pkg|gtk3}} package, while the GTK+ 2 version is in {{Pkg|gnome-themes-standard}}. [https://github.com/MartinBriza/adwaita-qt 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 [[install|installed]] with the {{AUR|adwaita-qt4}} and {{AUR|adwaita-qt5}} packages for the Qt 4 and 5 versions, respectively.
A few [[#GTK2 styles|dedicated applications]] are available in the official repositories that are able to change the GTK+ theme.
+
  
You can also install {{AUR|kde-gtk-config}} from [[AUR]]. After installation, it can be found in ''System Settings > Application Appearance > GTK Configuration''. It allows you to configure the look and feel for both GTK+ 2.x and GTK+ 3.x applications and is integrated with the KDE add-on installer (Get Hot New Stuff), so you can also download and install other GTK+ themes.
+
To set the Qt style as default:
  
===== Manual procedure =====
+
* For Qt4, it can be enabled with ''Qt Configuration'' ({{ic|qtconfig-qt4}}), choose ''adwaita'' under ''Appearance > GUI Style''. Alternatively, edit the {{ic|/etc/xdg/Trolltech.conf}} (system-wide) or {{ic|~/.config/Trolltech.conf}} (user-specific) file:
To manually change the GTK+ theme to '''oxygen-gtk''', you need to create the file {{ic|~/.kde4/share/config/gtkrc-2.0}} with the following content:
+
{{hc|~/.kde4/share/config/gtkrc-2.0|<nowiki>
+
include "/usr/share/themes/oxygen-gtk/gtk-2.0/gtkrc"
+
include "~/.themes/oxygen-gtk/gtk-2.0/gtkrc"
+
  
style "user"
+
{{hc|~/.config/Trolltech.conf|2=
{  
+
...
    fg[NORMAL] = "#1b1918"
+
[Qt]
    bg[NORMAL] = "#d5d1cf"
+
style=adwaita
    text[NORMAL] = "#181615"
+
...
    base[NORMAL] = "#ffffff"
+
    fg[ACTIVE] = "#1b1918"
+
    bg[ACTIVE] = "#d5d1cf"
+
    text[ACTIVE] = "#181615"
+
    base[ACTIVE] = "#ffffff"
+
    fg[PRELIGHT] = "#1b1918"
+
    bg[PRELIGHT] = "#d5d1cf"
+
    text[PRELIGHT] = "#ffffff"
+
    base[PRELIGHT] = "#43ace8"
+
    fg[SELECTED] = "#1b1918"
+
    bg[SELECTED] = "#d5d1cf"
+
    text[SELECTED] = "#ffffff"
+
    base[SELECTED] = "#43ace8"
+
    fg[INSENSITIVE] = "#8d8a88"
+
    bg[INSENSITIVE] = "#ccc7c5"
+
    text[INSENSITIVE] = "#a6a5a5"
+
    base[INSENSITIVE] = "#f4f4f4"
+
    GtkTreeView::odd_row_color="#ffffff"
+
    GtkTreeView::even_row_color="#f8f7f6"
+
}
+
 
+
widget_class "*" style "user"
+
 
+
style "tooltips"
+
{
+
    bg[NORMAL] = "#bedfff"
+
    fg[NORMAL] = "#252321"
+
}
+
 
+
widget "gtk-tooltips" style "tooltips"
+
#gtk-theme-name="qt4"
+
gtk-font-name="Sans Serif 9"
+
gtk-icon-theme-name="gk4ico"
+
gtk-icon-sizes = "panel-menu=16,16:panel=16,16:gtk-button=22,22:gtk-large-toolbar=22,22"
+
</nowiki>
+
 
}}
 
}}
  
Then you need to create the symbolic link {{ic|~/.kde4/share/config/gtkrc}}:
+
* For Qt 5, it can be enabled by setting the following [[Environment variables#Graphical applications|environment variable]]: {{ic|1=QT_STYLE_OVERRIDE=adwaita}}.
ln -s ~/.kde4/share/config/gtkrc-2.0 ~/.kde4/share/config/gtkrc
+
  
==== Oxygen icons ====
+
== Theme engines ==
If you are using Oxygen icons and want a consistent look in GTK+ dialogs, you can install the {{AUR|oxygenrefit2-icon-theme}} icon theme from [[AUR]] and set it as your GTK+ icon theme. To apply the theme you can use {{ic|lxappearance}} (or a similar program) or set it manually by adding the following line to {{ic|~/.kde4/share/config/gtkrc-2.0}}:
+
gtk-icon-theme-name="OxygenRefit2"
+
  
Another version of the Oxygen icon theme for GTK+ applications can be installed with the {{AUR|oxygen-gtk-icons}} package from [[AUR]].
+
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.
  
=== QtCurve ===
+
=== QGtkStyle ===
  
QtCurve is a highly popular and configurable set of widget styles for Qt4/KDE4, KDE3 and GTK+ 2.x. QtCurve can be installed with the packages {{Pkg|qtcurve-kde4}}, {{Pkg|qtcurve-kde3}} or {{Pkg|qtcurve-gtk2}}, all available in the official repositories. It has many controls for various options, ranging from the appearance of buttons to the shape of sliders.
+
{{Note|QGtkStyle has been removed from {{Pkg|qt5-base}} 5.7.0 [https://github.com/qtproject/qtbase/commit/899a815414e95da8d9429a4a4f4d7094e49cfc55] and added to {{AUR|qt5-styleplugins}} [https://github.com/qtproject/qtstyleplugins/commit/102da7d50231fc5723dba6e72340bef3d29471aa]}}
  
To manually change the GTK+ theme to '''QtCurve''', you need to create the file {{ic|~/.gtkrc-2.0-kde4}} with the following content:
+
{{Warning|Depending on GTK+ 2 theme, this style may cause rendering issues such as transparent fonts or inconsistent widgets.}}
include "/usr/share/themes/QtCurve/gtk-2.0/gtkrc"
+
include "/etc/gtk-2.0/gtkrc"
+
+
style "user-font"
+
{
+
    font_name="Sans Serif"
+
}
+
widget_class "*" style "user-font"
+
gtk-theme-name="QtCurve"
+
  
Then you need to create the symbolic link {{ic|~/.gtkrc-2.0}}:
+
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 {{Pkg|gtk2}} to be installed and configured.
ln -s .gtkrc-2.0-kde4 .gtkrc-2.0
+
If you want also specify a font, you can add (and adapt) the following line to the file:
+
  gtk-font-name="Sans Serif 9"
+
  
=== Others ===
+
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:
  
Similar style sets are those that look like each other - written and provided for both Qt and GTK+ - but are not necessarily from the same developers. You may have to do some minor tweaking to make them look the same (e.g. {{AUR|kdestyle-klearlook}} for Qt4/KDE4 and the Clearlooks GTK+ theme).
+
* For Qt4, it can be enabled with ''Qt Configuration'' ({{ic|qtconfig-qt4}}), choose ''GTK+'' under ''Appearance > GUI Style''. Alternatively, edit the {{ic|/etc/xdg/Trolltech.conf}} (system-wide) or {{ic|~/.config/Trolltech.conf}} (user-specific) file:
  
== Changing styles in each toolkit ==
+
{{hc|~/.config/Trolltech.conf|2=
 +
...
 +
[Qt]
 +
style=GTK+
 +
...
 +
}}
  
You can use the following methods to change the theme used in each environment.
+
* For Qt 5, it can be enabled by installing {{AUR|qt5-styleplugins}} and setting the following [[Environment variables#Graphical applications|environment variable]]: {{ic|1=QT_STYLE_OVERRIDE='gtk2'}}
  
=== Qt4 styles ===
+
For full uniformity, make sure that the configured [[GTK+#Themes|GTK+ theme]] supports both GTK+ 2 and GTK+ 3.
Qt4 styles cand be changed in a similar way:
+
* using the ''KDE4 System Settings'' (systemsettings), the settings can be found in ''Common Appearance and Behavior > Application Appearance > Style > Widget Style''
+
* using the command-line tool {{ic|kwriteconfig --file kdeglobals --group General --key widgetStyle [name of style]}}.
+
* using the ''Qt Configuration'' (qtconfig) application, the settings can be found in ''Appearance > Select GUI Style''.
+
  
Note that while Qt Configuration allows you to choose the theme, font, etc. for Qt apps, you can modify more settings with KDE4 System Settings (e.g. font antialiasing and hinting).
+
=== QGnomePlatform ===
  
=== Qt3 styles ===
+
This Qt 5 platform theme applies the appearance settings of GNOME for Qt applications. It can be installed with the {{AUR|qgnomeplatform-git}} package. It does not provide a Qt style itself, instead it requires a [[#Styles for both Qt and GTK+|style that support both Qt and GTK+]].
Qt3 styles can be changed in the following ways:
+
* using the ''KDE3 Control Center'' (kcontrol), the settings can be found in ''Appearance & Themes > Style > Widget Style''.
+
* using the command-line tool {{ic|kde-config --style [name of style]}}.
+
* using the default ''Qt Configuration'' (qt3config) application, the settings can be found in ''Appearance > Select GUI Style''.
+
  
=== GTK+2 styles ===
+
This platform theme is enabled automatically in GNOME since version 3.20. For other systems, it can be enabled by setting the following [[Environment variables#Graphical applications|environment variable]]: {{ic|1=QT_QPA_PLATFORMTHEME=qgnomeplatform}}.
Various applications and methods are available to change the GTK+ 2.x styles:
+
* {{App|kde-gtk-config|An application that allows you to change style and font of GTK+2 and Gtk+3 applications.|https://projects.kde.org/kde-gtk-config|{{AUR|kde-gtk-config}}}}
+
:After installation, {{ic|kde-gtk-config}} can also be found in ''System Settings > Application Appearance > GTK''.
+
* {{App|gtk-kde4|An application that allows you to change style and font of GTK+2 applications in KDE4.|http://kde-look.org/content/show.php?content&#61;74689|{{Pkg|gtk-kde4}}}}
+
:After installation, {{ic|gtk-kde4}} can also be found in ''System Settings > Lost and Found > GTK style''.
+
* {{App|LXAppearance|A desktop independent GTK+ style configuration tool from the LXDE project (it does not require other parts of the LXDE desktop).|http://wiki.lxde.org/en/LXAppearance|{{Pkg|lxappearance}}}}
+
* {{App|GTK+ Change Theme|A little program that lets you change your GTK+ 2.0 theme (considered a better alternative to ''switch2'').|http://plasmasturm.org/code/gtk-chtheme/|{{Pkg|gtk-chtheme}}}}
+
* {{App|GTK+ Preference Tool|A GTK+ theme selector and font switcher.|http://gtk-win.sourceforge.net/home/index.php/Main/GTKPreferenceTool|{{Pkg|gtk2_prefs}}}}
+
* {{App|GTK+ Theme Switch|A simple GTK+ theme switcher.|http://muhri.net/nav.php3?node&#61;gts|{{Pkg|gtk-theme-switch2}}}}
+
* For manual configuration see the [[GTK%2B#GTK.2B_2.x|GTK+ page]].
+
  
=== GTK+1 styles ===
+
== Tips and tricks ==
To change GTK1 styles you can install the {{AUR|gtk-theme-switch}} package from the [[AUR]].
+
=== KDE file dialogs for GTK+ applications ===
  
== Theme Engines ==
+
{{Warning|Some GTK+ applications may not be compatible with KGtk-wrapper (e.g. [[Chromium]]), sometimes the wrapper makes the application crash (e.g. [[Firefox]]) and even other applications like [[KDM]] (when used with e.g. [[Thunderbird]]).}}
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.
+
  
=== GTK+-Qt Engine ===
+
{{AUR|kgtk}} from the [[AUR]] is a wrapper script which uses {{ic|LD_PRELOAD}} to force KDE file dialogs in GTK+ 2.x apps. Once installed you can run GTK+ 2.x applications with {{ic|kgtk-wrapper}} in two ways (using [[GIMP]] in the examples):
  
This one is for use by GTK+ applications running in KDE, which basically means this does not work in other desktop environments. It applies all Qt settings (styles, fonts, not icons though) to the GTK+ applications and uses the style plugins directly. This engine can be installed with the {{Pkg|gtk-qt-engine}} package, available in the official repositories.
 
 
{{Note|There are rendering issues with some Qt styles.}}
 
 
You can access it from the ''KDE System Settings'' under ''Lost and Found > GTK Styles and Fonts''.
 
 
If you want to remove the engine entirely you need to uninstall it and also delete the following files:
 
$ rm ~/.gtkrc2.0-kde
 
$ rm ~/.kde4/env/gtk-qt-engine.rc.sh
 
$ rm ~/gtk-qt-engine.rc
 
 
=== QGtkStyle ===
 
 
This is a Qt style which intends to make applications blend perfectly into the GNOME desktop environment by using GTK+ to render all components. To use this style you must have at least GTK+ 2.0 and Qt 4.3, although Qt 4.4 or higher is preferred. To enable this style, use:
 
* ''Qt Configuration'': choose "GTK+" under ''Appearance > GUI Style''.
 
* ''KDE4 System Settings'': choose "GTK+ Style" under ''Application Appearance > Style > Applications''.
 
* the command-line: edit the {{ic|.config/Trolltech.conf}} file by adding:
 
 
{{hc|~/.config/Trolltech.conf|<nowiki>
 
...
 
[Qt]
 
style=GTK+
 
...</nowiki>}}
 
 
{{Note|Beginning with version 4.5 this style is included in Qt and does not require a separate package anymore.}}
 
 
== Tips and tricks ==
 
=== KDE file dialogs for GTK+ apps ===
 
[http://kde-apps.org/content/show.php?content&#61;36077 KGtk] is a wrapper script that uses LD_PRELOAD to force KDE file dialogs (open, save, etc.) in GTK+ 2.x apps. If you use KDE and prefer its file dialogs over GTK+'s then you can install {{AUR|kgtk}} from the [[AUR]] (a KDE3 version is also available in the {{AUR|kde3-kgtk}} package). Once installed you can run GTK+ 2.x applications with {{ic|kgtk-wrapper}} in two ways (using [[Gimp]] in the examples):
 
 
* Calling {{ic|kgtk-wrapper}} directly and using the GTK+ 2.x binary as an argument:
 
* Calling {{ic|kgtk-wrapper}} directly and using the GTK+ 2.x binary as an argument:
/usr/bin/kgtk-wrapper gimp
+
:{{bc|$ /usr/bin/kgtk-wrapper gimp}}
* Creating a symbolic link to {{ic|kgtk}} using the name of the GTK+ 2.x binary:
+
* Modifying the KDE .desktop shortcuts files you can find at {{ic|/usr/share/applications/}} to prefix the {{ic|Exec}} statement with kgtk-wrapper.
ln -s /usr/bin/kgtk-wrapper /usr/local/bin/gimp
+
:e.g. with [[GIMP]], edit the {{ic|/usr/share/applications/gimp.desktop}} shortcut file and replace {{ic|1=Exec=gimp-2.8 %U}} by {{ic|1=Exec=kgtk-wrapper gimp-2.8 %U}}.
:To run the version of Gimp with KDE dialogs, make sure you have {{ic|/usr/local/bin/}} before {{ic|/usr/bin/}} in your {{ic|PATH}}.
+
{{Note|Some GTK+ applications may not be compatible with KGtk.}}
+
  
=== aMSN with GTK+ or KDE dialogs ===
+
=== Using a GTK+ icon theme in Qt apps ===
aMSN's uses the Tk toolkit for its user interface. To make it use GTK+ or KDE dialogs install the {{AUR|amsn-plugins-desktopintegration}} plugin available in the [[AUR]]. Other plugins can be found on [http://www.amsn-project.net/plugins.php aMSN's Plugin Page].
+
  
=== Run an application with a specific theme ===
+
If running Plasma, install {{Pkg|kde-gtk-config}} and select the icon-theme under ''System Settings > Application Style > GTK''.
You can use custom styles for specific GTK+ 2.x applications. To run an application with a specific theme use:
+
GTK2_RC_FILES=/usr/share/themes/QtCurve/gtk-2.0/gtkrc firefox
+
  
This will launch Firefox with the QtCurve theme.
+
If you are not using [[GNOME]], run {{ic|gconf-editor}}, look under ''desktop > gnome > interface'' for the {{ic|icon_theme}} key and change it to your preference. As you are not using GNOME, it is possible that you will have to set {{ic|1=export DESKTOP_SESSION=gnome}} somewhere in your {{ic|~/.xinitrc}} or, if you are using [[LightDM]], in {{ic|/etc/environment}}.
  
=== Using a GTK+ icon theme in Qt apps ===
+
=== Improve subpixel rendering of GTK apps under KDE Plasma ===
If you are not using GNOME, run {{ic|gconf-editor}}, look under ''desktop > gnome > interface'' for the {{ic|icon_theme}} key and change it to your preference.
+
  
=== Improve subpixel rendering of GTK apps under KDE ===
+
See [[Font configuration#LCD filter]].
If the subpixel rendering in GTK apps is not as sharp as in native KDE Qt applications, try to add the following lines to your {{ic|$XDG_CONFIG_HOME/fontconfig/fonts.conf}} (between the {{ic|<fontconfig>}} tags):
+
 
+
{{bc|<nowiki>
+
<match target="font">
+
    <edit mode="assign" name="lcdfilter">
+
        <const>lcddefault</const>
+
    </edit>
+
</match>
+
</nowiki>}}
+
  
 
== Troubleshooting ==
 
== Troubleshooting ==
 
=== gtk-qt-engine does not work with OpenOffice ===
 
To make OpenOffice respect the Qt theme chosen with the GTK+-Qt Engine you need to add the following line to {{ic|/etc/profile}} (as root):
 
export SAL_GTK_USE_PIXMAPPAINT=1
 
 
Also make sure to select "Use my KDE style in GTK applications" in ''KDE4 System Settings'' under ''Lost and Found > GTK Styles and Fonts''.
 
  
 
=== Qt applications do not use QGtkStyle ===
 
=== Qt applications do not use QGtkStyle ===
 
+
Qt will not apply QGtkStyle correctly if GTK+ is using the [[#GTK+-Qt Engine|GTK+-Qt Engine]]{{Broken section link}}. Qt determines whether the GTK+-Qt Engine is in use by reading the GTK+ configuration files listed in the environmental variable {{ic|GTK2_RC_FILES}}. If the environmental variable is not set properly, Qt assumes you are using the engine, sets QGtkStyle to use the style GTK+ style ''Clearlooks'', and outputs an error message:
Qt will not apply QGtkStyle correctly if GTK+ is using the [[#GTK+-Qt Engine|GTK+-Qt Engine]]. Qt determines whether the GTK+-Qt Engine is in use by reading the GTK+ configuration files listed in the environmental variable {{ic|GTK2_RC_FILES}}. If the environmental variable is not set properly, Qt assumes you are using the engine, sets QGtkStyle to use the style GTK+ style ''Clearlooks'', and outputs an error message:
+
  
 
  QGtkStyle cannot be used together with the GTK_Qt engine.
 
  QGtkStyle cannot be used together with the GTK_Qt engine.
  
Another error you may get after launching {{ic|qtconfig}} from a shell and selecting the GTK+ style is:
+
Another error you may get after launching {{ic|qtconfig-qt4}} from a shell and selecting the GTK+ style is:
  
 
  QGtkStyle was unable to detect the current GTK+ theme.
 
  QGtkStyle was unable to detect the current GTK+ theme.
  
According to [https://bbs.archlinux.org/viewtopic.php?id&#61;99175&p&#61;1 this thread], you may simply have to install {{Pkg|libgnomeui}} to solve this issue. This has the added benefit that you don't need to edit a file every time you change your theme via a graphical tool, like the one provided by xfce.
+
According to [https://bbs.archlinux.org/viewtopic.php?id&#61;99175&p&#61;1 this thread], you may simply have to install {{Pkg|libgnomeui}} to solve this issue. This has the added benefit that you do not need to edit a file every time you change your theme via a graphical tool, like the one provided by xfce.
  
 
Users of [[Openbox]] and other non-GNOME environments may encounter this problem. To solve this, first add the following to your {{ic|.xinitrc}} file:
 
Users of [[Openbox]] and other non-GNOME environments may encounter this problem. To solve this, first add the following to your {{ic|.xinitrc}} file:
Line 261: Line 135:
 
}}
 
}}
  
Then specify the theme you want in the {{ic|~/.gtkrc-2.0}} file using a [[#GTK2 styles|dedicated application]] or manually, by adding:
+
Then specify the theme you want in the {{ic|~/.gtkrc-2.0}} file using a [[#GTK2 styles|dedicated application]]{{Broken section link}} or manually, by adding:
 
{{hc|.gtkrc-2.0|<nowiki>
 
{{hc|.gtkrc-2.0|<nowiki>
 
...
 
...
Line 298: Line 172:
 
=== Themes not working in GTK+ apps ===
 
=== Themes not working in GTK+ apps ===
  
If the style or theme engine you set up is not showing in your GTK applications then it's 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..
+
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
 
  $ export | grep gtk
  
 
Usually the expected files should be {{ic|~/.gtkrc}} for GTK1 and {{ic|~/.gtkrc2.0}} or {{ic|~/.gtkrc2.0-kde}} for GTK+ 2.x.
 
Usually the expected files should be {{ic|~/.gtkrc}} for GTK1 and {{ic|~/.gtkrc2.0}} or {{ic|~/.gtkrc2.0-kde}} for GTK+ 2.x.
  
Newer versions of {{pkg|gtk-qt-engine}} use {{ic|~/.gtkrc2.0-kde}} and set the export variable in {{ic|~/.kde/env/gtk-qt-engine.rc.sh}}.
+
Newer versions of {{AUR|gtk-qt-engine}}{{Broken package link|{{aur-mirror|gtk-qt-engine}}}} use {{ic|~/.gtkrc2.0-kde}} and set the export variable in {{ic|~/.kde/env/gtk-qt-engine.rc.sh}}.
If you recently removed '''gtk-qt-engine''' and are trying to set a GTK+ theme then you must also remove {{ic|~/.kde/env/gtk-qt-engine.rc.sh}} and reboot. Doing this will ensure that GTK+ looks for it's settings in the standard {{ic|~/.gtkrc2.0}} instead of the {{ic|~/.gtkrc2.0-kde}} file.
+
If you recently removed '''gtk-qt-engine''' and are trying to set a GTK+ theme then you must also remove {{ic|~/.kde/env/gtk-qt-engine.rc.sh}} and reboot. Doing this will ensure that GTK+ looks for its settings in the standard {{ic|~/.gtkrc2.0}} instead of the {{ic|~/.gtkrc2.0-kde}} file.

Latest revision as of 06:08, 23 August 2016

Related articles

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.

Breeze

Breeze is the default Qt style of KDE Plasma. It can be installed with the breeze package for Qt5, the breeze-kde4 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.

Adwaita

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-standard. 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-qt4AUR and adwaita-qt5AUR packages for the Qt 4 and 5 versions, respectively.

To set the Qt style as default:

  • For Qt4, it can be enabled with Qt Configuration (qtconfig-qt4), choose adwaita 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=adwaita
...
  • For Qt 5, it can be enabled by setting the following environment variable: QT_STYLE_OVERRIDE=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.

QGtkStyle

Note: QGtkStyle has been removed from qt5-base 5.7.0 [1] and added to qt5-stylepluginsAUR [2]
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
...
[Qt]
style=GTK+
...

For full uniformity, make sure that the configured GTK+ theme supports both GTK+ 2 and GTK+ 3.

QGnomePlatform

This Qt 5 platform theme applies the appearance settings of GNOME for Qt applications. It can be installed with the qgnomeplatform-gitAUR package. 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=qgnomeplatform.

Tips and tricks

KDE file dialogs for GTK+ applications

Warning: Some GTK+ applications may not be compatible with KGtk-wrapper (e.g. Chromium), sometimes the wrapper makes the application crash (e.g. Firefox) and even other applications like KDM (when used with e.g. Thunderbird).

kgtkAUR from the AUR is a wrapper script which uses LD_PRELOAD to force KDE file dialogs in GTK+ 2.x apps. Once installed you can run GTK+ 2.x applications with kgtk-wrapper in two ways (using GIMP in the examples):

  • Calling kgtk-wrapper directly and using the GTK+ 2.x binary as an argument:
$ /usr/bin/kgtk-wrapper gimp
  • Modifying the KDE .desktop shortcuts files you can find at /usr/share/applications/ to prefix the Exec statement with kgtk-wrapper.
e.g. with GIMP, edit the /usr/share/applications/gimp.desktop shortcut file and replace Exec=gimp-2.8 %U by Exec=kgtk-wrapper gimp-2.8 %U.

Using a GTK+ icon theme in Qt apps

If running Plasma, install kde-gtk-config and select the icon-theme under System Settings > Application Style > GTK.

If you are not using GNOME, run gconf-editor, look under desktop > gnome > interface for the icon_theme key and change it to your preference. As you are not using GNOME, it is possible that you will have to set export DESKTOP_SESSION=gnome somewhere in your ~/.xinitrc or, if you are using LightDM, in /etc/environment.

Improve subpixel rendering of GTK apps under KDE Plasma

See Font configuration#LCD filter.

Troubleshooting

Qt applications do not use QGtkStyle

Qt will not apply QGtkStyle correctly if GTK+ is using the GTK+-Qt Engine[broken link: invalid section]. Qt determines whether the GTK+-Qt Engine is in use by reading the GTK+ configuration files listed in the environmental variable GTK2_RC_FILES. If the environmental variable is not set properly, Qt assumes you are using the engine, sets QGtkStyle to use the style GTK+ style Clearlooks, and outputs an error message:

QGtkStyle cannot be used together with the GTK_Qt engine.

Another error you may get after launching qtconfig-qt4 from a shell and selecting the GTK+ style is:

QGtkStyle was unable to detect the current GTK+ theme.

According to this thread, you may simply have to install libgnomeui to solve this issue. This has the added benefit that you do not need to edit a file every time you change your theme via a graphical tool, like the one provided by xfce.

Users of Openbox and other non-GNOME environments may encounter this problem. To solve this, first add the following to your .xinitrc file:

.xinitrc
...
export GTK2_RC_FILES="$HOME/.gtkrc-2.0"
...
Note:
  • Make sure to add this line before invoking the window manager.
  • You can add multiple paths by separating them with colons.
  • Make sure to use $HOME instead of ~ as it will not properly expand to the user's home directory.

Then specify the theme you want in the ~/.gtkrc-2.0 file using a dedicated application[broken link: invalid section] or manually, by adding:

.gtkrc-2.0
...
gtk-theme-name="[name of theme]"
...

Some tools only insert the following include directive in ~/.gtkrc-2.0:

.gtkrc-2.0
...
include "/usr/share/themes/SomeTheme/gtk-2.0/gtkrc"
...

which apparently is not recognized by all versions of QGtkStyle. You can hotfix this problem by inserting the gtk-theme-name manually in your ~/.gtkrc-2.0 file like above.

Note: Style-changing applications will most probably rewrite the ~/.gtkrc-2.0 file the next time you change themes.

If these steps do not work, install gconf and run this command:

gconftool-2 --set --type string /desktop/gnome/interface/gtk_theme [name of theme]

If you further want to set the same icon and cursor theme, then you have to specify them, too.

gconftool-2 --set --type string /desktop/gnome/interface/icon_theme Faenza-Dark

This sets the icon theme to Faenza-Dark located in /usr/share/icons/Faenza-Dark. For the cursor theme you first have to set the gconf value.

gconftool-2 --set --type string /desktop/gnome/peripherals/mouse/cursor_theme Adwaita

Then you will have to create the file /usr/share/icons/default/index.theme with the following lines:

[Icon Theme]
Inherits=Adwaita

Themes not working in GTK+ apps

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.

Newer versions of gtk-qt-engineAUR[broken link: archived in aur-mirror] use ~/.gtkrc2.0-kde and set the export variable in ~/.kde/env/gtk-qt-engine.rc.sh. If you recently removed gtk-qt-engine and are trying to set a GTK+ theme then you must also remove ~/.kde/env/gtk-qt-engine.rc.sh and reboot. Doing this will ensure that GTK+ looks for its settings in the standard ~/.gtkrc2.0 instead of the ~/.gtkrc2.0-kde file.