統一 Qt 和 GTK 應用程式的外觀 - Arch Linux 中文维基

跳至內容

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

出自 Arch Linux 中文维基
翻譯狀態：

- 本文（或部分內容）譯自 Uniform look for Qt and GTK applications，最近一次同步於 2021年3月4日，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

相關文章

- GTK
- Qt

本文或本節內容已經過時。

原因： 此文許多內容已過時。 (在Talk:統一 Qt 和 GTK 應用程式的外觀討論)

基於 Qt 和 GTK 的程序使用不同的圖形庫來渲染圖形化用戶界面，各自具有不同的主題、風格和圖標，所以觀感明顯有所不同。這篇文章將使你的 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
    ...

- 對於 Qt 5，可以通過以下環境變量來啟用主題：`QT_STYLE_OVERRIDE=adwaita`。或者，使用 qt5ct包 軟體包。更多詳細說明，參考 Qt#在KDE Plasma以外的環境下配置Qt5應用程式。

## 主題引擎

主題引擎可以認為是一個簡單的 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 5，可以通過安裝 qt5-stylepluginsAUR 並設置以下環境變量來啟用它：`QT_QPA_PLATFORMTHEME=gtk2`

- 對於 Qt 6，可以通過安裝 qt6gtk2AUR 並在 qt6ct包 中選擇 qt6gtk2 樣式，或設置以下環境變量：`QT_QPA_PLATFORMTHEME=gtk2`。

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

### QAdwaitaDecorations

Qt 裝飾插件實現類似 GNOME Adwaita 的客戶端裝飾，適用於Qt 6 和 QT 5 平台。

安裝 qadwaitadecorations-qt5AUR 和 qadwaitadecorations-qt6包 軟體包。

可以通過設置環境變量 `QT_WAYLAND_DECORATION=adwaita` 開啟。

### QWhiteSurGtkDecorations

QWhiteSurGtkDecorations是一個 Qt 裝飾插件，可以在Gnome wayland上實現類似 GNOME WhiteSur-gtk 主題風格的客戶端裝飾，適用於Qt 6 和 QT 5 平台。

需要安裝 qwhitesurgtkdecorations-qt5AUR 和 qwhitesurgtkdecorations-qt6包 軟體包。

可以通過設置環境變量 `QT_WAYLAND_DECORATION=whitesur-gtk` 啟用它。

## Tips and tricks

### 在Qt應用程式中使用GTK圖標主題

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

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

然後，運行`dconf-editor`，然後在org> gnome > desktop > interface 下查找`icon-theme`鍵，並將其更改為您的首選圖標主題。

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

然後，運行`dconf-editor`，然後在 org > gnome > desktop> interface下查找`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-portal包和xdg-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應用也有不匹配的窗口裝飾外觀

安裝 qadwaitadecorations-qt5AUR 和 qadwaitadecorations-qt6AUR，並設置以下環境變量environment variable:`export QT_WAYLAND_DECORATION=adwaita`。

### GTK 應用程式不能完全使用 KDE 系統設置

為了進一步整合 GTK 應用程式上的 Plasma 設置，可能需要安裝 gnome-settings-daemon包、gsettings-desktop-schemas包 和 gsettings-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 小節以解決顏色奇怪的問題

分類：​

- 控制項工具集
- 小提升
- 使用「模板:過時」標記的頁面或章節

統一 Qt 和 GTK 應用程式的外觀
新增話題