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

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

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

Обзор

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

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

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

  • Выбрать стили отдельно для 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 для 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 входит в состав пакета , а версия GTK 2 находится в . adwaita-qt — это Qt-порт темы Adwaita. В отличие от #QGtkStyle, который подражает теме GTK 2, он является полноценным стилем Qt. Его можно установить с помощью пакетов и (компиляция займёт некоторое время) для версий Qt 4 и 5 соответственно.

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

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

Kvantum

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

Движки тем

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

QGtkStyle

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

Это стиль Qt4 по умолчанию в Cinnamon, GNOME и Xfce, и стиль Qt5 по умолчанию в Cinnamon, GNOME, MATE, LXDE и Xfce. В других средах:

  • Для Qt4 используется Конфигурация Qt (qtconfig-qt4), выберите GTK в пункте Внешний вид > Стиль интерфейса. Также можно отредактировать файл /etc/xdg/Trolltech.conf (общесистемный) или (пользовательский):
  • Для Qt 5 установите qt5-stylepluginsAUR и задайте переменную окружения QT_QPA_PLATFORMTHEME=gtk2
  • Для Qt 6 установите и выберите стиль qt6gtk2 в настройках или задайте переменную окружения

Для полного единообразия убедитесь, что выбранная тема GTK поддерживает как GTK 2, так и GTK 3. Если тема имеет несогласованный рендеринг после переключения Qt на стиль GTK2, установите и выберите тему.

QGnomePlatform

Эта тема применяет настройки внешнего вида GNOME для Qt-приложений. Она может быть установлена с помощью пакета или (разрабатываемая версия доступна в пакете или ). Она не предоставляет сам стиль Qt, вместо этого требуется стиль, поддерживающий как Qt, так и GTK.

Эта тема используется по умолчанию в GNOME с версии 3.20. Для других систем её можно включить через переменную окружения QT_QPA_PLATFORMTHEME=gnome.

Советы и рекомендации

Использование значков GTK в приложениях Qt

Если у вас Plasma, запустите kde-gtk-config и выберите нужные значки в разделе Параметры системы > Внешний вид.

Если у вас GNOME, запустите dconf-editor и измените ключ по адресу org > gnome > desktop > interface, прописав желаемую тему значков.

Если вы не используете среду рабочего стола (например, если у вас минималистичная система с ), установите пакет dconf-editor и измените тему значков как описано выше. Вам также может понадобиться прописать переменную окружения .

Добавление рамки окна и строки заголовка в приложениях GTK3, запущенных в KDE Plasma

Установите пакет и перезапустите оконный менеджер. Также можно запустить приложение GTK через обёртку:

$ gtk3-nocsd gedit

Улучшение субпиксельного рендеринга приложений GTK, запущенных в KDE Plasma

Смотрите Настройка шрифтов#LCD filter (ЖК-фильтр).

Согласованный диалог выбора файлов

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

Установите пакеты and и пропишите переменную окружения в файле /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 не работают

Если установленные вами стили или темы не отображаются в ваших GTK-приложениях, то, скорее всего, файлы настроек GTK по какой-то причине не загружаются. Вы можете проверить, где ваша система ожидает найти эти файлы, выполнив следующее:

$ export | grep gtk

Для GTK2 файлы обычно лежат в или .

После обновления системы приложения 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

Установите и пропишите переменную окружения . Это точно работает с темами Adwaita и Adwaita-dark.

Приложения GTK используют настройки KDE не полностью

Для более хорошей интеграции с Plasma попробуйте установить , и .

Отсутствует меню "GTK" в kde-gtk-config

Если kde-gtk-config по каким-то причинам не работает и в системных настройках KDE не появляется возможность настройки приложений GTK, можно использовать инструменты настройки GTK. Например, можно использовать : хоть он и является частью проекта LXDE, он не привязан к среде рабочего стола и может быть установлен отдельно от LXDE.

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

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

gollark: Yes, we remember the Hell Superset.
gollark: Line 1060 of https://pastebin.com/wKdMTPwQ, there's no PS# bug number to search for.
gollark: Well, I can show you the potatOS code doing insanity on *functions*.
gollark: Yes.
gollark: I can probably stop this from working if I edit the metatables in potatOS.
This article is issued from Archlinux. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.