Вернуться назад

Qt

Переменные

Пока я не задал:

QT_QPA_PLATFORMTHEME=qt6ct

qt6ct вообще не участвует.

Некоторые переменные, которые могут пригодиться:

Основная переменная: QT_STYLE_OVERRIDE. Она содержит в себе стиль. По умолчанию она пустая. А если она пустая, то Qt-приложения откатываются на Fusion. Так что скорее всего по умолчанию все приложения запускаются именна в стиле Fusion. В Qt также всегда предустановлены ещё два стиля: Breeze и Windows. Если я хочу запустить, например, программу Featherpad с применённым стилем Breeze, то это можно сделать вот так:

QT_STYLE_OVERRIDE=Breeze featherpad

Breeze, Fusion, Windows – это встроенные Qt-стили. Они – часть Qt. Они не лежат в /usr/share/themes/. Не устанавливаются пакетами. Если Qt вообще работает, то Breeze, Fusion и Windows всегда есть.

Qt-стили – это плагины. Физически они находятся в /usr/lib/qt6/plugins/styles/.

ls /usr/lib/qt6/plugins/styles/
  # breeze6.so  libqt6ct-style.so

breeze6.so – это плагин Breeze. Стили Fusion и Windows встроены в Qt. А libqt6ct-style.so – это не стиль, а переключатель, который подменяет стиль через qt6ct.

Можно ли установить ещё Qt-стили как .so ? Почти нет! В Qt6 классических QStyle-плагинов почти не осталось. Фактически есть один путь: Kvantum.

Kvantum

Kvantum – не QStyle, а SVG-движок, полноценный QStyle-бэкенд. Работает в Qt5 и Qt6.

sudo pacman -S kvantum

После установки kvantum, в qt6ct в списке тем появились: kvantum и kvantum-dark.

Темы устанавливаются в /usr/share/Kvantum/. У меня там уже установлено достаточно много. Видимо, в пакете Kvantum они есть по умолчанию. А Utterly-Nord... я ставил эту тему для KDE ради обоев. Возможно, она тоже сюда поставилась. Utterly-Nord содержит в том числе и Kvantum-темы.

После установки Kvantum запускаем kvantummanager. Здесь есть несколько вкладок:

Когда я применяю темы в kvantummanager, то конфигурация записывается в файл ~/.config/Kvantum/kvantum.kvconfig. Так что можно просто вписывать названия тем туда, если не хочется использовать графическое приложение:

[General]
theme=Utterly-Nord

А настройки конкретных тем, например Utterly-Nord-Solid, находятся в файле ~/.config/Kvantum/Utterly-Nord-Solid#/Utterly-Nord-Solid#.kvconfig.

Прозрачность

Если нужно понизить прозрачность в Utterly-Nord, то это можно сделать в файле ~/.config/Kvantum/Utterly-Nord/Utterly-Nord.kvconfig:

[%General]
reduce_window_opacity=40    # прозрачность окон, 0 - убрать прозрачность
reduce_menu_opacity=40      # просзрачность меню

opaque=app1,app2,...        # если сюда вписать приложение, то прозрачность к нему не будет применяться
opaque_colors=false

[Hacks]
transparent_ktitle_label=true
transparent_dolphin_view=true
transparent_pcmanfm_sidepane=true
transparent_menutitle=true
transparent_pcmanfm_view=true

Либо в самом kvantummanager: Настройка активной темы -> Компоновка и общий вид -> Уменьшить непрозрачность меню на 10% уменьшаем до 0, но меню всё равно немного прозрачное.

Текст: цвет, размер

~/.config/Kvantum/Utterly-Nord-Solid#/Utterly-Nord-Solid#.kvconfig

# ~/.config/Kvantum/Utterly-Nord-Solid#/Utterly-Nord-Solid#.kvconfig
...
[GeneralColors]
text.color=#eceff4
window.text.color=#eceff4
button.text.color=#eceff4
disabled.text.color=#d8dee9
tooltip.text.color=#eceff4
...

# пункты меню
[PanelButtonCommand]
text.normal.color        # цвет текста в пунктах меню / цвет текста в заголовках вкладок в falkon/featherpad
text.focus.color         # цвет текста на вкладке falkon при наведении
text.press.color         # активный плейлист в strawberry
text.toggle.color        # активная вкладка в falkon и в featherpad

[GeneralColors]
disabled.text.color        # цвет текста в выделенных пунктах меню / в неактивных пунктах меню
   # здесь почему-то не все цвета работают
   # green, blue, purple, grey – работают; yellow, white – нет
   # #ffff00 (чисто жёлтый), #ffff99 (светло-жёлтый) – не работает
   # #ffd700 (золотистый), #ffeb3b, ffc107 (оранжево-жёлтый) – работает
     # #d8dee9 – становится чисто белым
text.color               # в featherpad – цвет текста в строке состояния, в "о программе", в окошке открытия/сохранения файла
window.text.color        # в falkon – цвет текста в URL-строке, в строке поиска, в "о программе", в окошке открытия/сохранения файла. А также при нажатии на кнопки-иконки в featherpad.
   # text.color и window.text.color обычно проявляются в окнах "о программе", "открыть файл" и т.д.
link.color          # цвет текста ссылок. Например, в featherpad если мы откроем окно "О программе", там будет ссылка на страничку автора.
                    # в falkon будет ссылка на официальный сайт. 

То есть:

Особенности применения цетовых схем:

Поведение какое-то нелогичное. Например, вот две настройки:

[GeneralColors]
text.color=white
...
[PanelButtonCommand]
text.focus.color=blue
...

Этими цветами отображается текст в окне открытия файла. Список файлов и папок отображается белым цветом, а когда я навожу курсор на конкретный файл, то текст становится синим. А когда я убираю курсор с имени файла, то курсор становится опять белым.

[GeneralColors]
text.color=yellow
...
[PanelButtonCommand]
text.focus.color=blue
...

Теперь цвет текста файлов жёлтый. Когда я навожу курсор, он становится синим. Всё работает ожидаемо.

[GeneralColors]
text.color=brown
...
[PanelButtonCommand]
text.focus.color=blue
...

Теперь цвет текста в именах файлов коричнывый. Но когда я навожу курсор на конкретный файл, цвет текста не становится синим - он остаётся коричневым.

[GeneralColors]
text.color=black
...
[PanelButtonCommand]
text.focus.color=blue
...

Цвет текста у файлов чёрный. Навожу курсор на файл - цвет по-прежнему чёрный. Не меняется при наведении на синий.

ответ гпт

В Kvantum здесь действительно есть логика, но она неочевидная и связана не с самим цветом, а с контрастом, яркостью и внутренними проверками темы/Qt. Kvantum / Qt не всегда применяет text.focus.color, если считает, что новый цвет “хуже читается” или “недостаточно отличается” от обычного текста или фона. text.color – базовый цвет текста. Это обычный, неактивный цвет. text.focus.color – не «обязательный». Этот цвет НЕ применяется напрямую всегда. Он проходит через Qt-проверки контраста, особенно в: QListView, QFileDialog и tem views (списки, деревья). Главная причина: яркость. Если text.color темнее или близок по яркости к text.focus.color, Qt решает, что “смысла менять цвет нет”.

Короткое правило, которое реально работает: если базовый цвет текста тёмный — hover-цвет должен быть СИЛЬНО светлее, иначе Qt его просто проигнорирует.

Что неплохо бы поменять в Utterly-Nord-Solid:

[GeneralColors]
text.color=#87928a             # светло-серый
# window.text.color=#6F8476    # добавляем чуть-чуть болотно-зелёного оттенка
# window.text.color=#708E7A    # ещё чуть светлее и зелёно-болотнее
window.text.color=#6E937A      # чуть больше зеленоватости
tooltip.text.color=#6AAFD8     # цвет текста во всплывающих окнах-подсказках

[PanelButtonCommand]
text.normal.color=#87928a      # светло-серый
# disabled.text.color=#5F6762  # если оставить по умолчанию, то disabled будет белым.
disabled.text.color=#545B57    # ещё более блеклый/затемнённый

Некоторые дефолтные настройки в Utterly-Nord-Solid#:

[GeneralColors]
link.color=#81a1c1    # цвет ссылок. Например, в featherpad в "О программе" в тексте есть ссылки

Потестить qt-стили можно на featherpad, strawberry, qtractor, sqlitebrowser, falkon, qimgv, qps (Qt Task Manager)

Шрифт

Шрифт можно задать в qt6ct.

Нормальные стили: KvAdaptaDark, KvGnomeDark, KvGnomish, KvMojave, KvantumAlt, Utterly-Nord, Utterly-Nord-Solid (Без прозрачности)

Последнее, что я ставил: Liberation Mono 12.

Подводим итог

Я хочу запустить приложение featherpad с применённым Kvantum-стилем Utterly-Nord. Я в kvantummanager выбираю тему "Utterly-Nord". Я выбираю в qt6ct стиль kvantum. Я присваиваю переменной QT_QPA_PLATFORMTHEME значение qt6ct и запускаю featherpad.

# Или так:
QT_QPA_PLATFORMTHEME=qt6ct featherpad
   # предпочтительней
   # минимальный и корректный вариант для Sway

# или можно так:
QT_STYLE_OVERRIDE=Kvantum featherpad

Что делает Qt – по шагам:

Можно сделать вот так:

QT_QPA_PLATFORMTHEME=qt6ct QT_STYLE_OVERRIDE=Breeze featherpad

Тут получается, что я переопределил временно стиль на Breeze, но оставил иконки, шрифты, DPI – из qt6ct (А в qt6ct у меня выставлен стиль kvantum).

Переменная QT_QPA_PLATFORM у меня по умолчанию пустая. Но Qt видит, что у меня в XDG_SESSION_TYPE есть значение wayland и берёт его оттуда. Но если мне по каким-то причинам нужно точно указать, чтобы Qt шёл через Wayland (например, если он запускается через XWayland), то:

QT_QPA_PLATFORM=wayland featherpad

Но лучше так не делать. Потому что некоторые приложения работают только через XWayland или имеют баги в native Wayland. Я лишаю Qt свободы выбора, которую разработчики осознанно заложили. А также ломаю fallback: если Wayland временно недоступен, Qt не сможет откатиться на xcb.

Принудительно через XWayland:

QT_QPA_PLATFORM=xcb featherpad

Qt6ct

Когда я запускаю qt6ct, то вижу предупреждение: "Приложение не настроено. Переменная среды QT_QPA_PLATFORMTHEME не установлена (требуемые значения: qt6ct или qt5ct)". Поэтому сначала устанавливаем эту переменную, а потом запускаем qt6ct:

# устанавливаем env-переменную и запускаем программу:
export QT_QPA_PLATFORMTHEME=qt6ct
featherpad

# или передаёт в программу shell-переменную:
QT_QPA_PLATFORMTHEME=qt6ct featherpad

# или вот так:
env QT_QPA_PLATFORMTHEME=qt6ct featherpad

То есть, что нужно, чтобы тема применилась: в qt6ct я устанавливаю какую-нибудь тему (например, Breeze). Далее я присваиваю переменной QT_QPA_PLATFORMTHEME значение qt6ct. И теперь программы будут запускаться в стиле Breeze.


    ## Для начала ставим Qt6ct, чтобы настраивать стили:
        sudo pacman -S qt6ct
        
        ## Для работы qt6-приложений необходимо установить qt6-wayland
        ## А для работы qt6-приложений - qt5-waylan
        
    ## Конфигурационный файл: ~/.config/qt6ct/qt6ct.conf
        ## Цветовые схемы: ~/.config/qt6ct/colors/
        ## Стили: ~/.config/qt6ct/qss/
    ## Системный конфиг: /usr/share/qt6ct/qt6ct.conf
        ## Цветовые схемы: /usr/share/qt6ct/colors/
        ## Стили: /usr/share/qt6ct/qss/
    
    ## В программе можно выбрать три темы (стиля):
        Oxygen, Breeze, Windows, Fusion
    
    ## Как поменять тему.
        открываем программу qt6ct, настраиваем стили, цветовую схему, шрифты и нажимаем "Применить"
        теперь при запуске Qt6-приложения нам надо ему указать, откуда брать стиль - из программы qt6ct
        Это делается через переменную окружения QT_QPA_PLATFORMTHEME
        
        QT_QPA_PLATFORMTHEME=qt6c6 qbittorrent
        
    ## В моём дефолтном ~/.config/qt6ct/qt6ct.conf-файле ссылка на цветовую схему:
        color_scheme_path=/usr/share/qt6ct/colors/darker.conf
    ## Когда я меняю тему в qt6ct, то в файле ~/.config/qt6ct/qt6ct.conf меняется содержимаое.
        ## Если быть точным меняется только одна строка:
            style=Fusion на style=Oxygen, или на style=Windows
            ## Остальное остаётся как было.
    ## Если я хочу поменять цвета темы, нужно менять цвета в одной из цветовых схем в /usr/share/qt6ct/colors/.
    ## А ещё лучше скопировать цветовую схему из /usr/share/qt6ct/colors/ в ~/.config/qt6ct/colors/ и переименовать её во что-то своё.
        ## Например, назовём её "pipka". И тогда в программе Qt6ct в списке цветовых схем появится "pipka".
        ## Мы выберем пипку, а в файле ~/.config/qt6ct/qt6ct.conf укажем ссылку на пипку:
            color_scheme_path=/home/mark/.config/qt6ct/colors/pipka.conf
            
    ## Теперь запустим qbittorrent:
        QT_QPA_PLATFORMTHEME=qt6c6 qbittorrent
            ## Цветовая схема применилась
            
    ## В цветовой схеме qt6ct цвета указаны в одну строчку через запятую (21 штука), вот так:
    active_colors=#ffffffff, #ff424245, #ff979797, #ff5e5c5b, #ff302f2e, #ff4a4947, #ffffffff, #ffffffff, #ffffffff, #ff3d3d3d, #ff222020, #ffe7e4e0, #ff12608a, #fff9f9f9, #ff0986d3, #ffa70b06, #ff5c5b5a, #ffffffff, #ff3f3f36, #ffffffff, #80ffffff
            
    В Qt порядок цветов фиксирован. В qt6ct он такой (соответствует QPalette.ColorRole):
        1. Window (фон окна)
        2. WindowText (текст окна, основной текст) 
        3. Base (фон текстовых полей)      
        4. AlternateBase        
        5. ToolTipBase        
        6. ToolTipText       
        7. Text (текст в полях ввода / списках)        
        8. Button (фон кнопок)        
        9. ButtonText (текст кнопок)       
        10. BrightText (яркий текст, обычно для ошибок)       
        11. Highlight (фон выделения)       
        12. HighlightedText (текст на выделении)       
        13. Link       
        14. LinkVisited        
        15. PlaceholderText       
        16. Light       
        17. Midlight        
        18. Dark       
        19. Mid      
        20. Shadow       
        21. N/A (иногда используется для дополнительных целей)
        
    ## Но у Qt6ct есть один недостаток: его стили не применяются к KDE-приложениям.
    ## KDE-приложения: okular, kwrite, dolphin, elisa
    ## Qt6-приложения: featherpad, strawberry, qbittorrent, dragon, ark, kcalc, gwenview, qmmp, kfind
    
    ## Если мы запустим, например, Okular, то обнаружим, что цветовая схема не применилась:
        QT_QPA_PLATFORMTHEME=qt6c6 okular
    ## А если запустим любое Qt6-приложение, то цветовая схема применится:
        QT_QPA_PLATFORMTHEME=qt6c6 strawberry

Kvantum


    ## Если нам нужно устанавливать новые схемы и более гибко управлять темами, то нам понадобится Kvantum.
        sudo pacman -S kvantum
    ## Установились: Kvantum Manager и Kvantum Preview
    ## Через KvantumManager мы можем менять темы.
    
        sudo pacman -S kvantum-theme-materia    ## Ставим одну тему из оф. репозитория Arch
        yay -S kvantum-theme-arc                ## И ещё одну из AUR
        
        
    ## Темы устанавливаются в /usr/share/Kvantum/
        ## У нас вместе с kvantum-theme-materia установились три темы:
            /usr/share/Kvantum/Materia
            /usr/share/Kvantum/MateriaDark
            /usr/share/Kvantum/MateriaLight
        ## И вместе с kvantum-theme-arc тоже три:
            /usr/share/Kvantum/Arc
            /usr/share/Kvantum/ArcDark
            /usr/share/Kvantum/ArcDarker
        ## Остальные темы в /usr/share/Kvantum - дефолтные, которые поставились вместе с Kvantum'ом.
            
    ## Мы эти темы можем изменить в KvantumManager в разделе "Изменение или удаление тем".
        ## В этом разделе мы вибираем темы, которые есть в /usr/share/Kvantum/
        
    ## Мы также можем скопировать темы из /usr/share/Kvantum/ в ~/.config/Kvantum/
        ## Для этого зайдём в раздел "Утсановка/Обновление тем", выберем папку из /usr/share/Kvantum/ и нажмём "Установить".
        ## После этого тема скопируется из /usr/share/Kvantum/ в ~/.config/Kvantum/
        ## Теперь мы можем её кастомизировать под себя.
        
    ## Допустим, мы выбрали тему ArcDark и установили её в польовательскую директорию.
    ## Тогда мы можем редактировать эту тему в файле:
        ~/.config/Kvantum/ArcDark/ArcDark.kvconfig
        
    ## Запустим qbittorrent:
        QT_QPA_PLATFORMTHEME=qt6ct qbittorrent
    ## Тема применилась
    
    ## Qt6-приложения, которые можно потестить:
        featherpad, strawberry, qbittorrent, dragon, ark, kcalc, gwenview, qmmp, kfind, falkon
    ## KDE-приложения:
        dolphin, kwrite, okular, elisa
    
    
    ## А теперь давайте запустим  pdf-вьюер Okular:
        QT_QPA_PLATFORMTHEME=qt6ct okular
    ## Тема НЕ ПРИМЕНИЛАСЬ к этому приложению.
    ## Если вы посмотрите повнимательней, то обнаружите, что шрифты и размеры шрифтов, которые мы установили в qt6ct применились, 
        ... а вот всё, что мы настраивали в Kvantum, не применилось.
        
        
    ## А теперь давайте запустим Okular вот так:
        QT_QPA_PLATFORMTHEME=qt6ct QT_STYLE_OVERRIDE=kvantum okular
            ## Стили из kvantum применились
            ## от QT_QPA_PLATFORMЕTHEME сохранились настройки шрифта (размер)
            ## QT_STYLE_OVERRIDE - наложил дополнительно цветовую схему, оставив шрифты, настроенные в qt6ct
    
    ## Чтобы поменять отдельные цвета в Kvantum-теме, надо редактировать файл ~/.config/Kvantum/ArcDark/ArcDark.kvconfig
        ## Самые основные цвета хранятся в разделе: [GeneralColors]
        ## Дефолтный цвет шрифта:
            text.color=black
            
            [GeneralColors]
            window.color=#353945 - цвет фона, иногда кусок фона или даже текст иногда
            base.color=#404552 - фон окна в dolphin
            alt.base.color=#404552 - в Strawberry - фон некоторых трэков
            button.color=#444a58 - фиг знает, непонятно
            light.color=#404552 - тоже непонятно
            mid.light.color=#404552 - тоже фиг знает
            dark.color=#2F343f - в qbittorrent бордеры статусбаров
            mid.color=#2F343f - хз
            highlight.color=#5294E2 - подсвечивается фон текста на выбранном треке в плейлисте в Strawberry
            inactive.highlight.color=#5294E2 - фиг знает
            text.color=#d3dae3 - обычный текст. В dolphin - только столбик со списком файлов слева
            window.text.color=#d3dae3 - тоже текст в окне. В Dolphin - заголовки категорий в списке файлов слева
            button.text.color=#d3dae3 - фиг знает
            disabled.text.color=#898d99 - в Strawberry этим цветом отображается время на временной шкале
            tooltip.text.color=#d3dae3 - фиг знает
            highlight.text.color=#d3dae3 - цвет текста на выбранном треке в плейлисте в Strawberry
            link.color=#1d99f3 - фиг знает
            link.visited.color=#9b59b6 - фиг знает
            
            [ItemView]
            text.toggle.color=#ffffff - фиг знает
            
            [PanelButtonCommand]
            text.normal.color=#d3dae3 - пункты меню (айтемы)
            text.focus.color=#d3dae3 - цвет пунктов меню, когда на них наводиш мышку и кликаешь
            text.press.color=#ffffff - цвет текста на кнопках во время нажатия, например в Dragon
            text.toggle.color=#ffffff - фиг знает
            
            [Tab]
            text.normal.color=#898d99 - цвет текста в плейлистах Strawberry, например
            text.focus.color=#ffffff - цвет текста в плейлистах Strawberry, когда наводишь на него курсор
            text.press.color=#ffffff - хз
            text.toggle.color=#ffffff - цвет текста в текущем, активном плейлисте в Strawberry
            
            [HeaderSection]
            text.normal.color=#d3dae3 - заголовки (в плейлистах Strawberry, в списке торрентов в Qbittorrent)
            text.focus.color=#5294e2 - цвет текста заголовков, когда на них наводишь мышку
            text.press.color=#d3dae3 - цвет текста заголовков, когда я их хватаю курсором и тащу
            text.toggle.color=#d3dae3 - фиг знает
            
            [Toolbar]
            text.normal.color=#d3dae3 - текст меню (в Strawberry - нет)(в Dolphin - одна надпись на верхней панели) (В Dolphin почему-то становятся белыми пара кнопок на верхней панели... какой бы цвет я не поставил сюда, кнопки становятся белыми)
            text.focus.color=#d3dae3 - фиг знает
            text.press.color=#ffffff - фиг знает
            text.toggle.color=#ffffff - фиг знает
            
            [ToolbarButton]
            text.normal.color=#d3dae3 - фиг знает
            ...
            
            [Progressbar]
            text.normal.color=#d3dae3 - фиг знает где
            ...
            
            [Menu]
            text.press.color=#ffffff - фиг знает
            text.toggle.color=#ffffff - фиг знает
            
            [MenuItem]
            text.focus.color=#ffffff - пункт меню, когда на него наводишь курсор
            text.press.color=#ffffff - пункт меню, когда на него нижмаем
            
            [ComboBox]
            text.toggle.color=#ffffff - фиг знает
            
            [ToolboxTab]
            text.normal.color=#d3dae3 - фиг знает
            text.press.color=#ffffff - фиг знает
            text.focus.color=#d3dae3 - фиг знает
        
            
        
        QT_QPA_PLATFORMTHEME=qt6ct QT_STYLE_OVERRIDE=kvantum dolphin
            ## А вот тут не все цвета применяются
            ## Например, цвет текста, которым подписываются файлы, не меняется.
            ## BreadCrumbs тоже не меняются
            
        ## 
        ## С цветом текста слева (список файлов и папок) ещё можно что-то предпринять, покопавшись в ~/.config/Kvantum/ArcDark/ArcDark.kvconfig,
        ## С BreadCrumbs можно попробовать что-то намудрить, используя .qss-стили, ...
        ## ... а вот с текстом под файлами ничего сделать не получается. Откуда он берётся - фиг знает.
        ## Выход: не пользоваться Dolphin'ом.
            
            
    ## Программы из пакета qt6-tools: assistant, designer, linguist
        Эти программы вообще не поддаются никакому изменению. Тут оформление вшито в бинарники и не меняется.
            
            
    ## ДОПОЛНИТЕЛЬНО
        
        Вроде как есть ещё ~/.config/kdeglobals, откуда KDE-приложения берут цветовые настройки.
        Для того, чтобы цветовые схемы применялись, надо чтобы в фоне был запущен демон kded6.
        
        ## То есть после того, как мы изменили kdeglobals, надо сделать примерно следующее:
            kbuildsycoca6       // применяем новые настройки из kdeglobals
            kquitapp6 kded6     // завершаем процесс kded6
            kded6               // заново запускаем kded6
                            
        ## Цветовые схемы можно писать напрямую в ~/.config/kdeglobals, а можно подгружать из специальных папок:
            ## локальная папка: ~/.local/share/color-schemes/
            ## системная папка: /usr/share/color-schemes/
            
    
    ## Но у мне этот способ не заработал.