統一 Qt 和 GTK 應用程式的外觀

出自 Arch Linux 中文维基

基於 QtGTK 的程序使用不同的圖形庫來渲染圖形化用戶界面,各自具有不同的主題、風格和圖標,所以觀感明顯有所不同。這篇文章將使你的 Qt 和 GTK 程序看起來更相似,以此獲得更加現代化、集成化的桌面體驗。

介紹[編輯 | 編輯原始碼]

要想在不同的圖形庫之間獲得相似的外觀,你通常需要修改以下內容:

  • 主題——應用程式和組件等元素的自定義外觀。通常包含一套風格、圖標主題和顏色主題。
  • 風格——組件的布局和樣式。
  • 圖標主題——全局圖標。
  • 顏色主題——與風格相適應的全局顏色樣式。

你可以選擇下面的不同方法:

  • 使用下面列出的,適用於各個圖形庫的工具分別修改 Qt 和 GTK 的主題,以選擇外觀相似的主題(樣式,顏色,圖標,光標,字體)。
  • 使用特殊的主題引擎,該引擎作為中間人修改其他圖形庫的主題,以匹配您的主要圖形庫。

Qt 和 GTK 通用的主題[編輯 | 編輯原始碼]

下面列出了幾種主題,Qt 和 GTK 都可使用,並且風格統一。這些主題適配了 Qt 和 GTK 的主要版本。有了這些主題,你就可以在使用不同的圖形庫構建的應用程式之間得到相同的外觀了。

提示:如果希望將用戶定義的主題應用於 root 用戶的應用, 參考GTK#主題沒有應用到 root 用戶的應用程式上Qt#主題沒有應用到 root 用戶的應用程式上
注意: GTK 3 從 3.16 版本開始不再支持非 CSS 主題,因此,以前的解決方案,例如 Oxygen-Gtk,已經不再可用

Breeze[編輯 | 編輯原始碼]

Breeze 是 KDE Plasma 的默認 Qt 主題。它可以通過適用於 Qt 5 的 breeze,適用於 Qt 4 的 breeze-kde4AUR 以及適用於 GTK 2 和 GTK 3 的 breeze-gtk 軟體包安裝。

安裝後,您可以使用GTK 配置工具更改 GTK 主題。

如果當前運行的是 KDE Plasma,請安裝 kde-gtk-config,然後從命令行運行之;或者註銷後重新登錄,接著轉到系統設置 > 外觀 > 應用程式風格 > 配置 GNOME/GTK 應用程式風格…來配置 GTK 程序的主題。「系統設置」中設置的字體、圖標主題、光標和組件樣式將自動應用至 GTK,僅 GTK 主題需要用前面提到的 GTK 配置工具手動更改。

Adwaita[編輯 | 編輯原始碼]

Adwaita是 GNOME 默認的主題。GTK 3 版本包含在 gtk3 軟體包中,而 GTK 2 版本包含在 gnome-themes-extra 中。adwaita-qt是 Adwaita 主題的 Qt 移植版本。與模仿 GTK 2 主題的 #QGtkStyle 不同,它提供了與 GTK 3 Adwaita 相似的原生 Qt 樣式。可以通過適用於 Qt 4 的 adwaita-qt4AUR、適用於 Qt 5 的 adwaita-qt5 和適用於 Qt 6 的 adwaita-qt6 軟體包來安裝此主題。

要將 Qt 樣式設置為默認值:

  • 對於 Qt 4,可以使用Qt 配置qtconfig-qt4)啟用它,在外觀 > GUI 樣式中選擇adwaita。或者,編輯 /etc/xdg/Trolltech.conf(系統範圍)或 ~/.config/Trolltech.conf(用戶範圍)文件:
~/.config/Trolltech.conf
...
[Qt]
style=adwaita
...

主題引擎[編輯 | 編輯原始碼]

主題引擎可以認為是一個簡單的 API,用於從一個或多個圖形庫轉譯主題(圖標除外)。這些引擎為進程添加額外的代碼,這種解決方案不如使用原生主題那樣優雅可行。

Kvantum[編輯 | 編輯原始碼]

Kvantum(kvantum)是一個用於 Qt 5 的,基於 SVG 的可定製主題引擎,具有多種內置樣式,包含一些版本的流行 GTK 主題,例如 Adapta、Arc、Ambiance 和 Materia。

Kvantum 被視為一種風格而不是主題。要通過環境變量的方式為所有 Qt 應用設置 Kvantum,使用 QT_STYLE_OVERRIDE=kvantum

主題配置[編輯 | 編輯原始碼]

要為 Kvantum 設置一個主題變體,如 KvLibadwaita,像這樣編輯配置文件:

/etc/xdg/Kvantum/kvantum.kvconfig(或 ~/.config/Kvantum/kvantum.kvconfig)
...
theme=KvLibadwaita
...

QGtkStyle[編輯 | 編輯原始碼]

注意: QGtkStyle 已從 qt5-base 5.7.0 中移除[1]並添加到 qt5-stylepluginsAUR[2]
警告: 取決於 GTK 2 的主題,此樣式可能會導致顯示問題,例如透明的字體或不一致的部件。

此 Qt 樣式使用 GTK 2 渲染所有組件以便於與 GNOME 和類似基於 GTK 的環境相協調。從 Qt 4.5 開始,此樣式包含在 Qt 中。它要求安裝 gtk2 並進行配置。

這是 Cinnamon、GNOME 和 Xfce 中的默認 Qt 4 樣式,也是 Cinnamon、GNOME、MATE、LXDE 和 Xfce 中的默認 Qt 5 樣式。至於其他環境:

  • 對於Qt4,可以使用Qt 配置qtconfig-qt4)啟用它,在外觀 > GUI 樣式下選擇 GTK。或者,編輯 /etc/xdg/Trolltech.conf(系統範圍)或 ~/.config/Trolltech.conf(用戶範圍):
~/.config/Trolltech.conf
...
[Qt]
style=GTK+
...
  • 對於 Qt 6,可以通過安裝 qt6gtk2AUR 並在 qt6ct 中選擇 qt6gtk2 樣式,或設置以下環境變量:QT_QPA_PLATFORMTHEME=gtk2

為了完全統一,請確保配置的 GTK 主題同時支持 GTK 2 和 GTK 3。如果你的首選主題在將 Qt 配置為使用 GTK 2 後出現了不一致的渲染效果,請安裝 gtk-theme-switch2AUR,然後選擇一個主題。

QGnomePlatform[編輯 | 編輯原始碼]

Qt 5 平台主題適用於 Qt 應用程式的 GNOME 外觀設置。它可以與 qgnomeplatform-qt5qgnomeplatform-qt6 軟體包一起安裝,也可以與開發版本的 qgnomeplatform-qt5-gitAURqgnomeplatform-qt6-gitAUR 軟體包一起安裝。它本身不提供 Qt 樣式,而是需要同時支持 Qt 和 GTK 樣式。 從 3.20 版開始,此平台主題已在 GNOME 中自動啟用。對於其他系統,可以通過設置以下環境變量來啟用它:QT_QPA_PLATFORMTHEME=qgnomeplatform

Tips and tricks[編輯 | 編輯原始碼]

在Qt應用程式中使用GTK圖標主題[編輯 | 編輯原始碼]

如果您正在運行Plasma,請安裝kde-gtk-config,然後在系統設置 > 應用程式風格 > 應用樣式 > 配置GNOME/GTK應用樣式下選擇圖標主題。

如果您使用的是GNOME,請首先檢查是否安裝了dconf-editor

然後,運行dconf-editor,然後在組織 > gnome > 桌面 > 界面 下查找icon-theme鍵,並將其更改為您的首選圖標主題。

如果您使用的不是GNOME,例如,如果您使用的是i3-wm,請首先安裝dconf-editor

然後,運行dconf-editor,然後在 組織 > gnome > 桌面 > 界面下查找icon-theme鍵,並將其更改為您的圖標主題。

由於您使用的不是GNOME,因此可能需要在個人的配置文件中設置DESKTOP_SESSION的值。 為此,請在終端中執行以下代碼,然後重新啟動系統。

$ echo 'export DESKTOP_SESSION=gnome' >> /etc/profile

或者

export DESKTOP_SESSION=gnome設置在~/.xinitrc中的某個位置,或者在Xprofile中使用一個Display manager

注意: 如果未應用圖標主題,則可能要檢查您輸入的首選主題名稱是否格式正確。例如,如果要將當前活動的圖標主題應用於QT應用程式,則可以使用以下命令找到其名稱的正確格式:
$ awk -F= '/icon-theme/ {print $2}' ~/.gtkrc-2.0

添加標題欄和框架到KDE Plasma下的GTK3應用程式[編輯 | 編輯原始碼]

要使Gnome/GTK應用程式顯示KDE/Plasma的標題欄和框架,請安裝gtk3-nocsd-gitAUR並重新啟動窗口管理器以加載更新的庫路徑。

您還可以使用它運行Gtk應用程式:

$ gtk3-nocsd gedit

在KDE Plasma下改善GTK應用程式的亞像素渲染[編輯 | 編輯原始碼]

See Font configuration#LCD filter.

一致的文件對話框[編輯 | 編輯原始碼]

為了具有相同的文件對話框,可以使用XDG Portal。

安裝 xdg-desktop-portalxdg-desktop-portal-kde,並在環境變量environment variable中設置GTK_USE_PORTAL=1

故障排查[編輯 | 編輯原始碼]

主題對GTK程序無效[編輯 | 編輯原始碼]

如果你安裝的風格或主題引擎在某些GTK程序不能顯示,很可能你的GTK設置文件因某些原因不能被加載。你可以檢查你的系統找到那些文件作如下設置:

export | grep gtk

通常那些文件設置在 ~/.gtkrc (GTK1), ~/.gtkrc2.0 或 ~/.gtkrc2.0-kde (GTK2)

新版gtk-qt-engine 使用 ~/.gtkrc2.0-kde 和 ~/.kde/env/gtk-qt-engine.rc.sh 設置輸出變量 如果你最近移除了gtk-qt-engine然後試圖設置GTK主題,你必有要移除 ~/.kde/env/gtk-qt-engine.rc.sh 然後重啟。這樣做會使GTK外觀使用標準的設置 ~/.gtkrc2.0來代替 ~/.gtkrc2.0-kde

系統升級後GTK應用程式不使用svg(breeze)圖標[編輯 | 編輯原始碼]

嘗試運行下面命令來解決問題:

# gdk-pixbuf-query-loaders --update-cache

Flatpak Qt應用程式不使用Gnome Adwaita黑暗主題[編輯 | 編輯原始碼]

如果將主題切換為Adwaita-dark後,Flatpak Qt應用程式仍使用精簡版,請安裝所需的KStyle:

# flatpak install flathub org.kde.KStyle.Adwaita

即使在設置Qt主題後,在GNOME Wayland上運行的Qt應用也有不匹配的窗口裝飾外觀[編輯 | 編輯原始碼]

為了有一個匹配的窗口裝飾外觀,您必須安裝qgnomeplatform-qt5,並設置以下環境變量environment variable:QT_QPA_PLATFORMTHEME='gnome'

GTK 應用程式不能完全使用 KDE 系統設置[編輯 | 編輯原始碼]

為了進一步整合 GTK 應用程式上的 Plasma 設置,可能需要安裝 gnome-settings-daemongsettings-desktop-schemasgsettings-qt,這將為 GTK 提供適當的 Qt 綁定。

安裝kde-gtk-config後,沒有「系統設置>應用程式樣式> GTK」菜單[編輯 | 編輯原始碼]

使用kde-gtk-config時,可以選擇lxappearance之類的GTK configuration tools來配置GTK 2和GTK 3樣式。

即使它來自LXDE項目,它也是與桌面無關的(它不需要LXDE桌面的其他部分)

Dolphin主題與Nautilus匹配效果不佳[編輯 | 編輯原始碼]

參考 arch:Dolphin#Mismatched_folder_view_background_colors 小節以解決顏色奇怪的問題