Qt 다크 모드 구성

Qt 다크 모드 구성

Fedora 37에서 39로 업그레이드한 후 Qt 애플리케이션(예: vlc)은 다크 모드용으로 구성된 gnome 셸 세션에서 실행될 때 더 이상 다크 모드에서 렌더링되지 않습니다.

분명히 Qt 애플리케이션은 Fedora 39에서 기본적으로 다크 모드로 렌더링되어야 합니다.https://jgrulich.cz/2023/08/22/qt-theming-in-fedora-workstation/- 하지만 내 시스템에서는 그렇지 않습니다.

Gtk 애플리케이션(예: Gnome 셸 설정)은 어두운 모드로 표시되며 Gnome 셸 구성은 다음과 같습니다.

$ gsettings get org.gnome.desktop.interface color-scheme
'prefer-dark'

Fedora 업그레이드, 자동 제거 등을 수행한 후에는 다음 adwaita 패키지가 설치됩니다:

$ rpm -qa | grep adwaita
adwaita-cursor-theme-45.0-1.fc39.noarch
adwaita-icon-theme-45.0-1.fc39.noarch
qadwaitadecorations-qt6-0.1.3-2.fc39.x86_64
qadwaitadecorations-qt5-0.1.3-2.fc39.x86_64
libadwaita-1.4.2-2.fc39.x86_64
adwaita-gtk2-theme-3.28-17.fc39.x86_64

어떻게 더 디버깅할 수 있나요?

Qt 애플리케이션에 대한 Gnome 쉘 다크 모드 통합을 수정하는 방법은 무엇입니까?

아니면 모든 Qt 애플리케이션에 대해 기본적으로 다크 모드를 구성하는 방법은 무엇입니까?

답변1

Fedora 39에는 Qt 애플리케이션에 Gnome 쉘 스타일을 제공하는 데 사용할 수 있는 adwaita-qt6/adwaita-qt5 패키지도 있습니다. 그러나 adwaita-qt 프로젝트는유지되지 않음QT_STYLE_OVERRIDE=Adwaita-Dark이는 어두운 adwaita 테마를 강제하기 위해 뭔가가 작동하지만 어두운 모드가 불완전하다는 것을 의미합니다. 예를 들어 메뉴 표시줄은 여전히 ​​밝습니다.


해결책은 kvantum기본 테마가 어두운 모드 스타일인 "엔진" 테마를 설치하는 것입니다.

따라서 다음은 어두운 모드에서 vlc를 실행하기에 충분합니다.

$ export QT_STYLE_OVERRIDE=kvantum
$ vlc

또는

$ QT_STYLE_OVERRIDE=kvantum vlc

참고: Qt4와 달리 Qt5 이상 $HOME에서는 특정 포인트 파일을 통해 스타일을 구성할 수 없습니다.일하다그리고 환경변하기 쉬운.

불행히도 kvantum의 기본 설정도 완벽하지 않습니다. 예를 들어, vlc 및 okular의 일반 패널 라벨은 재생 시간 및 남은 시간과 같이 회색 배경에 검은색 글꼴로 표시되므로 읽기가 어렵습니다.


qt5ct또 다른 부분적인 해결책은 사용자 정의 팔레트, 즉 "더 어두운" 색상 구성표를 사용하여 Qt Fusion 스타일을 설치하고 구성하는 것입니다 .

$ QT_QPA_PLATFORMTHEME=qt5ct qt5ct

그래서:

$ head -n 6 ~/.config/qt5ct/qt5ct.conf        
[Appearance]
color_scheme_path=/usr/share/qt5ct/colors/darker.conf
custom_palette=true
standard_dialogs=default
style=Fusion

다시 말하지만, Qt 프로그램이 실제로 이 모든 것을 사용하려면 환경 변수를 설정해야 합니다. QT_QPA_PLATFORMTHEME하지만 이번에는 그렇습니다.

예:

$ QT_QPA_PLATFORMTHEME=qt5ct vlc

이는 vlc에 더 나은 어두운 모드 스타일을 제공합니다. 즉, 이제 재생 시간/남은 시간 레이블도 어두운 회색 배경에 흰색 텍스트로 표시되며 더 이상 결함이 없습니다.

그러나 okular와 같은 KDE 프로그램에서는 이 해결 방법이 작동하지 않습니다. 이는 okular가 기본 조명 모드 스타일을 사용하고 아무 것도 변경되지 않음을 의미합니다.

관련 정보