Uniform look for Qt and GTK applications (Русский)

From ArchWiki
Состояние перевода: На этой странице представлен перевод статьи Uniform look for Qt and GTK applications. Дата последней синхронизации: 24 января 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Программы, основанные на Qt и GTK, используют разные способы отображения графического интерфейса. Они используют различные темы, стили, иконки и многие другие вещи, так что программы, сделанные на разном инструментарии, выглядят непохоже друг на друга. Эта статья поможет сделать приложения Qt и GTK выглядящими более согласованно.

Обзор

Чтобы добиться схожего внешнего вида, вам понадобится изменить следующее:

  • Тема - Набор стилей, тема иконок и цветовая схема.
  • Стиль - Внешний вид виджетов.
  • Тема значков - Глобальный набор значков.
  • Цветовая схема - Глобальный набор цветов, используемый в сочетании со стилем.

Можно выбрать два разных подхода:

  • Выбрать стили отдельно для GTK и Qt с помощью перечисленных ниже инструментов и постараться выбрать похожие темы (стиль, цвета, иконки, курсоры, шрифты).
  • Использовать специальные движки тем, которые конвертируют стили одного инструментария в стили другого, чтобы он соответствовал вашему основному инструментарию.

Стили для Qt и GTK

Существуют стили, которые реализованы как для Qt, так и для GTK. С их помощью вы можете иметь единый внешний вид для всех приложений независимо от того, с помощью какого инструментария они были написаны.

Совет: Вы можете захотеть применить определённые пользователем стили к приложениям, запускаемым от имени root. Смотрите GTK (Русский)#Тема не применяется к приложениям root и Qt (Русский)#Не применяется тема для приложений, запущенных от имени root.
Примечание: Начиная с версии 3.16, GTK больше не поддерживает темы, не использующие CSS, поэтому старые решения вроде Oxygen-Gtk больше не работают.

Breeze

Breeze — это стиль Qt по умолчанию в KDE Plasma. Его можно установить с помощью пакета breeze для Qt5, пакета breeze-kde4AUR[ссылка недействительна: package not found] для 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-gitAUR и adwaita-qt6-gitAUR для версий Qt 4, 5 и 6 соответственно.

Чтобы использовать Adwait в качестве стиля Qt по умолчанию:

  • Для Qt4 используется Конфигурация Qt (qtconfig-qt4), выберите adwaita в пункте Внешний вид > Стиль интерфейса. Также можно отредактировать файл /etc/xdg/Trolltech.conf (общесистемный) или ~/.config/Trolltech.conf (пользовательский):
~/.config/Trolltech.conf
...
[Qt]
style=adwaita
...

Kvantum

kvantum — это настраиваемый движок тем на основе SVG для Qt5, который поставляется с множеством встроенных стилей, включая версии некоторых популярных тем GTK, таких как Adapta, Arc, Ambiance, Materia.

Движки тем

Движок тем (theme engine) можно представить как тонкий API, который конвертирует темы (кроме иконок) между одним или несколькими инструментариями. Эти движки выполняют дополнительный код в процессе работы, так что такое решение не столь элегантно и оптимально, как использование родных стилей.

QGtkStyle

Примечание: QGtkStyle был удалён из qt5-base 5.7.0 [1] и добавлен в qt5-stylepluginsAUR [2]
Важно: Некоторые темы GTK 2 могут отображаться некорректно.

Этот стиль 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-qt5AUR или qgnomeplatform-qt6AUR (разрабатываемая версия доступна в пакете qgnomeplatform-qt5-gitAUR или qgnomeplatform-qt6-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.

Примечание: Если тема значков не применилась, проверьте правильность ввода её имени. Например, если вы хотите применить активную в данный момент тему значков к вашим приложениям Qt, вы можете найти правильный формат её имени с помощью команды:
$ 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 это не реализовано.

Примечание: Существует ещё много gtk-приложений, в которых портал не реализован должным образом (заброшенные приложения, или авторы сосредоточены на других задачах). Чтобы упростить выбор файлов из таких приложений, вы можете хотя бы синхронизировать закладки из dolphin в nautilus. Используйте эту команду:
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-qt5AUR и пропишите переменную окружения 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.

Внешний вид Dolphin не полностью соответствует Nautilus

Смотрите Dolphin#Mismatched folder view background colors.