Uniform look for Qt and GTK applications (Русский)
Программы, основанные на Qt и GTK, используют разные способы отображения графического интерфейса. Они используют различные темы, стили, иконки и многие другие вещи, так что программы, сделанные на разном инструментарии, выглядят непохоже друг на друга. Эта статья поможет сделать приложения Qt и GTK выглядящими более согласованно.
Обзор
Чтобы добиться схожего внешнего вида, вам понадобится изменить следующее:
- Тема - Набор стилей, тема иконок и цветовая схема.
- Стиль - Внешний вид виджетов.
- Тема значков - Глобальный набор значков.
- Цветовая схема - Глобальный набор цветов, используемый в сочетании со стилем.
Можно выбрать два разных подхода:
- Выбрать стили отдельно для GTK и Qt с помощью перечисленных ниже инструментов и постараться выбрать похожие темы (стиль, цвета, иконки, курсоры, шрифты).
- Использовать специальные движки тем, которые конвертируют стили одного инструментария в стили другого, чтобы он соответствовал вашему основному инструментарию.
Стили для Qt и GTK
Существуют стили, которые реализованы как для Qt, так и для GTK. С их помощью вы можете иметь единый внешний вид для всех приложений независимо от того, с помощью какого инструментария они были написаны.
Breeze
Breeze — это стиль Qt по умолчанию в KDE Plasma. Его можно установить с помощью пакета breeze для Qt5, пакета breeze-kde4AUR для Qt4 и пакета breeze-gtk для GTK 2 и GTK 3.
После установки вы можете использовать один из многочисленных инструментов настройки GTK, чтобы изменить тему GTK.
Если у вас KDE Plasma, установите kde-gtk-config, перелогиньтесь и перейдите в Параметры системы (systemsettings), раздел Внешний вид > Оформление приложений > Настроить оформление приложений GNOME/GTK. Шрифты, темы значков, курсоры и стили виджетов, установленные в настройках KDE, автоматически влияют на настройки GTK; ручной выбор требуется только для темы GTK.
Adwaita
Adwaita является стандартной темой GNOME. Версия для GTK 3 входит в состав пакета gtk3, а версия GTK 2 находится в gnome-themes-extra. adwaita-qt — это Qt-порт темы Adwaita. В отличие от #QGtkStyle, который подражает теме GTK 2, он является полноценным стилем Qt. Его можно установить с помощью пакетов adwaita-qt4AUR и adwaita-qt5 (компиляция займёт некоторое время) для версий Qt 4 и 5 соответственно.
Чтобы использовать Adwait в качестве стиля Qt по умолчанию:
- Для Qt4 используется Конфигурация Qt (
qtconfig-qt4
), выберите adwaita в пункте Внешний вид > Стиль интерфейса. Также можно отредактировать файл/etc/xdg/Trolltech.conf
(общесистемный) или~/.config/Trolltech.conf
(пользовательский):
~/.config/Trolltech.conf
... [Qt] style=adwaita ...
- Для Qt5 можно задать переменную окружения
QT_STYLE_OVERRIDE=adwaita
или использовать qt5ct (смотрите Qt (Русский)#Настройка приложений Qt5 в окружениях, отличных от KDE Plasma).
Kvantum
kvantum — это настраиваемый движок тем на основе SVG для Qt5, который поставляется с множеством встроенных стилей, включая версии некоторых популярных тем GTK, таких как Adapta, Arc, Ambiance, Materia.
Движки тем
Движок тем (theme engine) можно представить как тонкий API, который конвертирует темы (кроме иконок) между одним или несколькими инструментариями. Эти движки выполняют дополнительный код в процессе работы, так что такое решение не столь элегантно и оптимально, как использование родных стилей.
QGtkStyle
Этот стиль Qt использует GTK 2 для рендеринга всех компонентов, чтобы быть похожим на GNOME и другие среды, ипользующие GTK. Начиная с Qt 4.5, этот стиль входит в состав Qt. Он требует установки и настройки gtk2.
Это стиль Qt4 по умолчанию в Cinnamon, GNOME и Xfce, и стиль Qt5 по умолчанию в Cinnamon, GNOME, MATE, LXDE и Xfce. В других средах:
- Для Qt4 используется Конфигурация Qt (
qtconfig-qt4
), выберите GTK в пункте Внешний вид > Стиль интерфейса. Также можно отредактировать файл/etc/xdg/Trolltech.conf
(общесистемный) или~/.config/Trolltech.conf
(пользовательский):
~/.config/Trolltech.conf
... [Qt] style=GTK+ ...
- Для Qt 5 установите qt5-stylepluginsAUR и задайте переменную окружения
QT_QPA_PLATFORMTHEME=gtk2
- Для Qt 6 установите qt6gtk2AUR и выберите стиль qt6gtk2 в настройках qt6ct или задайте переменную окружения
QT_QPA_PLATFORMTHEME=qt6gtk2
Для полного единообразия убедитесь, что выбранная тема GTK поддерживает как GTK 2, так и GTK 3. Если тема имеет несогласованный рендеринг после переключения Qt на стиль GTK2, установите gtk-theme-switch2AUR и выберите тему.
QGnomePlatform
Эта тема применяет настройки внешнего вида GNOME для Qt-приложений. Она может быть установлена с помощью пакета qgnomeplatform-qt5 (разрабатываемая версия доступна в пакете qgnomeplatform-gitAUR). Она не предоставляет сам стиль Qt, вместо этого требуется стиль, поддерживающий как Qt, так и GTK.
Эта тема используется по умолчанию в GNOME с версии 3.20. Для других систем её можно включить через переменную окружения QT_QPA_PLATFORMTHEME=gnome
.
Советы и рекомендации
Использование значков GTK в приложениях Qt
Если у вас Plasma, запустите kde-gtk-config и выберите нужные значки в разделе Параметры системы > Внешний вид.
Если у вас GNOME, запустите dconf-editor и измените ключ icon-theme
по адресу org > gnome > desktop > interface, прописав желаемую тему значков.
Если вы не используете среду рабочего стола (например, если у вас минималистичная система с i3-wm), установите пакет dconf-editor и измените тему значков как описано выше.
Вам также может понадобиться прописать переменную окружения DESKTOP_SESSION
.
$ awk -F= '/icon-theme/ {print $2}' ~/.gtkrc-2.0
Добавление рамки окна и строки заголовка в приложениях GTK3, запущенных в KDE Plasma
Установите пакет gtk3-nocsd-gitAUR и перезапустите оконный менеджер. Также можно запустить приложение GTK через обёртку:
$ gtk3-nocsd gedit
Улучшение субпиксельного рендеринга приложений GTK, запущенных в KDE Plasma
Смотрите Настройка шрифтов#LCD filter (ЖК-фильтр).
Согласованный диалог выбора файлов
Если вы хотите иметь одинаковый внешний вид диалога выбора файлов в приложениях GTK и Qt, можно использовать порталы XDG.
Установите пакеты xdg-desktop-portal and xdg-desktop-portal-kde и пропишите переменную окружения GTK_USE_PORTAL=1
в файле /etc/environment
.
Имейте в виду, что не во всех приложениях GTK это работает корректно. Например, Thunderbird поддерживает это.
Приложения на основе Electron должны использовать как минимум Electron 14 (смотрите #19159) и корректно реализовывать эту функцию. Для vscode есть pull request.
Meld 3.20.3-1 использует диалог gtk; версия 3.21.1 из meld-gitAUR использует диалог kde, но не может открывать каталоги.
В GIMP это не реализовано.
awk -F\" '/<bookmark href=\"file/ {print $2}' < $HOME/.local/share/user-places.xbel > $HOME/.config/gtk-3.0/bookmarksТакже можно использовать bookmarksync-gitAUR для этой цели. Там вы можете вручную редактировать и синхронизировать закладки в обе стороны.
Решение проблем
Темы в приложениях GTK не работают
Если установленные вами стили или темы не отображаются в ваших GTK-приложениях, то, скорее всего, файлы настроек GTK по какой-то причине не загружаются. Вы можете проверить, где ваша система ожидает найти эти файлы, выполнив следующее:
$ export | grep gtk
Для GTK2 файлы обычно лежат в ~/.gtkrc2.0
или ~/.gtkrc2.0-kde
.
После обновления системы приложения GTK не используют значки svg (breeze)
Для исправления выполните следующую команду:
# gdk-pixbuf-query-loaders --update-cache
Приложения Flatpak Qt не используют тему Adwaita dark
Установите нужный KStyle:
# flatpak install flathub org.kde.KStyle.Adwaita
Приложения Qt, запущенные на GNOME Wayland, имеют отличающееся оформление рамки окна даже после установки темы Qt
Установите qgnomeplatform-qt5 и пропишите переменную окружения QT_QPA_PLATFORMTHEME='gnome'
.
Это точно работает с темами Adwaita и Adwaita-dark.
Приложения GTK используют настройки KDE не полностью
Для более хорошей интеграции с Plasma попробуйте установить gnome-settings-daemon, gsettings-desktop-schemas и gsettings-qt.
Отсутствует меню "GTK" в kde-gtk-config
Если kde-gtk-config по каким-то причинам не работает и в системных настройках KDE не появляется возможность настройки приложений GTK, можно использовать инструменты настройки GTK. Например, можно использовать lxappearance: хоть он и является частью проекта LXDE, он не привязан к среде рабочего стола и может быть установлен отдельно от LXDE.