跳转至内容

Qt 和 GTK 应用程序的统一外观

来自 ArchWiki

QtGTK 程序使用不同的窗口小部件工具包来渲染图形用户界面。它们默认带有不同的主题、样式和图标集等,因此“外观和体验”差异显著。本文将帮助您使 Qt 和 GTK 应用程序看起来更相似,以获得更精简和统一的桌面体验。

概述

为了使不同工具包的外观保持一致,您通常需要修改以下内容

  • 主题(Theme):应用程序、窗口小部件集等的自定义外观。它通常由样式、图标主题和颜色主题组成。
  • 样式(Style):窗口小部件集的图形布局和外观。
  • 图标主题(Icon Theme):全局图标集。
  • 颜色主题(Color Theme):与样式结合使用的全局颜色集。

您可以选择多种方法

  • 使用下面列出的每个工具包的工具分别修改 GTK 和 Qt 样式,并尽量选择外观相似的主题(样式、颜色、图标、光标、字体)。
  • 使用特定的 主题引擎,它作为中间层修改其他图形工具包以匹配您的主要工具包。

Qt 和 GTK 的共有样式

为了实现整合,目前有一些可用的窗口小部件样式集,为 Qt 和 GTK 的所有主要版本编写和提供。通过这些样式,无论应用程序是用哪种工具包编写的,您都可以拥有统一的外观。

提示 您可能需要将用户定义的样式应用于 root 应用程序,请参阅 GTK#Theme not applied to root applicationsQt#Theme not applied to root applications
注意 自 3.16 版本起,GTK 3 不再支持 非 CSS 主题,因此之前的解决方案(如 Oxygen-Gtk)已不再适用

Qt 主题的 GTK 移植版

这些主题最初是为 Qt 环境创建的,后来被移植到 GTK。

Breeze

Breeze 是 KDE Plasma 的默认 Qt 样式。可以通过安装 breeze 软件包以及用于 GTK 2 和 GTK 3 的 breeze-gtk 软件包来获取。

安装完成后,您可以使用众多 GTK 配置工具 中的任何一个来更改 GTK 主题。

如果您正在运行 KDE Plasma,请安装 kde-gtk-config,注销并重新登录,然后转到系统设置 > 颜色与主题 > 应用程序样式 > 配置 GNOME/GTK 应用程序样式…。在系统设置中设置的字体、图标主题、光标和窗口小部件样式会自动影响 GTK 设置;只需手动使用上述模块设置 GTK 主题即可。

如果您没有运行 KDE Plasma,可以使用 qt5ct-kdeAURqt6ct-kdeAUR 将 Breeze 应用于 Qt 应用程序,您还可以将配色方案更改为 Breeze-Dark。

GTK 主题的 Qt 移植版

这些主题最初是为 GTK 环境创建的,后来被移植到 Qt。

Adwaita

本文或本章节已过时。

原因: Adwaita-qt 项目已停止维护,不再积极开发。[1] (在 讨论页 讨论)

Adwaita 是 GNOME 的默认主题。GTK 3 版本包含在 gtk3 软件包中,而 GTK 2 版本则在 gnome-themes-extra-gtk2AUR 中。adwaita-qt 是 Adwaita 主题的 Qt 移植版。与模仿 GTK 2 主题的 #QGtkStyle 不同,它提供了一种看起来像 GTK 3 Adwaita 的原生 Qt 样式。它可以通过 安装 adwaita-qt5-gitAURadwaita-qt6-gitAUR 软件包(分别对应 Qt 5 和 Qt 6)获得。

要设置 Qt 样式,请设置以下 环境变量QT_STYLE_OVERRIDE=adwaita。或者,使用 qt5ct 软件包。有关更详细的说明,请参阅 Qt#Configuration of Qt 5/6 applications under environments other than KDE Plasma

移植到 Kvantum 的 GTK 主题

Kvantum (kvantum) 是一个基于 SVG 的 Qt6 样式自定义工具,自带多种内置或外部样式,包括一些流行的 GTK 主题版本,如 Adapta、Arc、Ambiance、LibadwaitaMateria。更多主题可以在 KDE Store 上找到。对于 Qt5,您还需要额外安装 kvantum-qt5 软件包。

Kvantum 作为 Qt 样式而非 Qt 平台主题运行。要为所有 Qt 应用程序设置 Kvantum,请在 qt6ct(针对 Qt6)或 qt5ct(针对 Qt5)中进行设置,或者使用环境变量 QT_STYLE_OVERRIDE=kvantum

主题配置

配置 Kvantum 的主题变体(例如 KvLibadwaita),请编辑配置文件

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

或使用 kvantummanager 图形界面。

主题引擎

主题引擎 可以被视为一个轻量级的 API 层,它在一种或多种工具包之间转换主题(不包括图标)。这些引擎在处理过程中添加了一些额外的代码,有人认为这种方案不如使用原生样式优雅和优化。

QGtk3Style

这是一个从 5.7.0 版本开始内置于 qt5-base [2]qt6-base 中的平台主题。它可用于根据当前的 GTK3 样式来渲染 Qt5 和 Qt6 应用程序。可以通过设置以下 环境变量 来启用:QT_QPA_PLATFORMTHEME=gtk3。对于 Adwaita 用户,它可以与 #QAdwaitaDecorations 一起使用以获得完整的外观。

QGtkStyle

注意 QGtkStyle 已从 qt5-base 5.7.0 [3] 中移除,并添加到了 qt5-stylepluginsAUR [4]
警告 取决于 GTK 2 主题,该样式可能会导致渲染问题,例如字体透明或窗口小部件显示不一致。

这种 Qt 样式使用 GTK 2 来渲染所有组件,以融入 GNOME 及类似的基于 GTK 的环境。从 Qt 4.5 开始,该样式被包含在 Qt 中。它要求安装并配置 gtk2AUR

这是 Cinnamon、GNOME 和 Xfce 中的默认 Qt4 样式,也是 Cinnamon、GNOME、MATE、LXDE 和 Xfce 中的默认 Qt5 样式。在其他环境中:

  • 对于 Qt4,可以通过 Qt 配置 (qtconfig-qt4) 启用,在 外观 > GUI 样式 下选择 GTK。或者,编辑 /etc/xdg/Trolltech.conf (系统级) 或 ~/.config/Trolltech.conf (用户级) 文件。
~/.config/Trolltech.conf
...
[Qt]
style=GTK+
...
  • 对于 Qt 6,可以通过安装 qt6gtk2AUR 并选择 qt6gtk2 样式(在 qt6ct 中),或者设置以下环境变量:QT_QPA_PLATFORMTHEME=gtk2

为达到完全统一,请确保已配置的 GTK 主题 同时支持 GTK 2 和 GTK 3。如果您偏好的主题在配置 Qt 使用 GTK2 后出现渲染不一致的情况,请安装 gtk-theme-switch2AUR 并选择一个主题。您还应确保该主题安装在 /usr/share/themes 中,因为 $XDG_DATA_HOME/themes 目录不会被扫描以查找活动的 GTK 2 主题。

QAdwaitaDecorations

QAdwaitaDecorations 是一个 Qt 装饰插件,为 Wayland 实现了类似 Adwaita 的客户端装饰。它可以通过安装 qadwaitadecorations-qt5AURqadwaitadecorations-qt6AUR 软件包来获得。安装后,将 QT_WAYLAND_DECORATION=adwaita 设置为环境变量。

QWhiteSurGtkDecorations

QWhiteSurGtkDecorations 是一个 Qt 装饰插件,为 Wayland 实现了类似 WhiteSur-gtk 的客户端装饰。它可以通过安装 qwhitesurgtkdecorations-qt5AURqwhitesurgtkdecorations-qt6AUR 软件包来获得。安装后,将 QT_WAYLAND_DECORATION=whitesur-gtk 设置为环境变量。

技巧与提示

在 Qt 应用程序中使用 GTK 图标主题

如果您正在运行 Plasma,请运行 kde-gtk-config 并在 系统设置 > 应用程序样式 > GTK 中选择图标主题。

如果您正在使用 GNOME,请运行 dconf-editor 并将 org > gnome > desktop > interface 下的 icon-theme 键更改为您偏好的图标主题。

如果您没有使用 桌面环境(例如在运行带有 i3-wm 的最小系统),请 安装 dconf-editor 并按照上述说明设置图标主题。您可能还需要在配置文件中设置 DESKTOP_SESSION 的值。请参阅 Environment variables#Defining variables 了解实现该目标的可能方法。

注意 如果图标主题未应用,您可能需要检查您输入的偏好主题名称格式是否正确。例如,如果您想将当前活动的图标主题应用于 Qt 应用程序,可以通过命令找到其名称的正确格式。
$ awk -F= '/icon-theme/ {print $2}' ~/.gtkrc-2.0

在 KDE Plasma 下为 GTK3 应用程序添加标题栏和边框

要使 GNOME/GTK 应用程序显示 KDE/Plasma 标题栏和边框,请禁用客户端装饰,具体操作请参阅 GTK#Client-side decorations

在 KDE Plasma 下改善 GTK 应用程序的次像素渲染

请参阅 Font configuration#LCD filter

在 KDE Plasma 下实现统一的文件对话框

要在 KDE Plasma 中使所有应用程序使用相同的文件对话框,可以使用 XDG 桌面门户

第一步,安装 xdg-desktop-portalxdg-desktop-portal-kde

环境变量方法

过去,设置环境变量 GTK_USE_PORTAL=1 对于大多数应用程序已经足够。一些较新的 GTK 应用程序可能会改用 GDK_DEBUG=portals(见 GTK NEWS),而其他应用程序(如 Betterbird 128.5.2esr-bb19,见讨论)仍需要原始变量。您可能需要测试哪些变量对您的特定应用程序有效,或者同时使用这两个变量以确保最大兼容性。

配置文件方法

本文或本节需要在语言、wiki 语法或风格方面进行改进。请参阅 Help:Style 获取参考。

原因: 在适用时使用 Template:icTemplate:bcTemplate:hc。请参阅 Help:Style#systemd units operations。(在 讨论页 讨论)

xdg-desktop-portal 1.18.0 版本起,建议直接配置门户系统。

设置首选门户后端

这可以针对每个用户进行配置,也可以在系统范围内进行配置。

用户特定配置

创建配置目录

$ mkdir -p ~/.config/xdg-desktop-portal/

将以下内容追加到 ~/.config/xdg-desktop-portal/portals.conf

[preferred]
default=kde
org.freedesktop.impl.portal.FileChooser=kde

系统范围配置

以 root 用户身份创建该目录

# mkdir -p /etc/xdg/xdg-desktop-portal/

创建包含以下内容的 /etc/xdg/xdg-desktop-portal/portals.conf 文件

[preferred]
default=kde
org.freedesktop.impl.portal.FileChooser=kde
强制门户服务使用特定桌面环境

这可以确保无论当前运行的是什么桌面环境,门户服务始终使用正确的后端。

用户特定配置

创建覆盖(override)目录

$ mkdir -p ~/.config/systemd/user/xdg-desktop-portal.service.d/

将以下内容追加到 ~/.config/systemd/user/xdg-desktop-portal.service.d/override.conf

[Service]
Environment="XDG_CURRENT_DESKTOP=KDE"

系统范围配置

以 root 用户身份创建该目录

# mkdir -p /etc/systemd/user/xdg-desktop-portal.service.d/

创建包含以下内容的 /etc/systemd/user/xdg-desktop-portal.service.d/override.conf 文件

[Service]
Environment="XDG_CURRENT_DESKTOP=KDE"
重启门户服务

重新加载 systemd 用户守护进程并重启门户服务

$ systemctl --user daemon-reload
$ systemctl --user restart xdg-desktop-portal.service

这种配置方法独立于当前的桌面环境,相比单纯依赖环境变量,被认为在应对未来变更时更加稳健。

应用程序兼容性

并非所有 GTK 应用程序都能正确支持 KDE 文件对话框。

  • 使用 Electron 的应用程序应至少使用 Electron 14(见 #19159)并正确实现此功能。
  • VSCode 有一个修复此问题的 Pull Request,请参阅 #126113
  • GIMP 尚未实现对门户的使用,见 错误报告

同步书签

仍有许多 GTK 应用程序未正确实现门户功能(废弃的应用程序或开发者专注于其他任务)。为了简化这些应用程序中的文件选择,您至少可以同步 Dolphin 和 Nautilus 之间的书签。请使用此命令。

$ awk -F\" '/<bookmark href="file/ {print $2}' < $HOME/.local/share/user-places.xbel > $HOME/.config/gtk-3.0/bookmarks

或者,使用 bookmarksync-gitAUR 来实现此目的。在那里,您可以手动编辑并同步双边的书签。

特定应用程序的设置

除了环境变量方法外,一些 GTK 应用程序有自己的设置来强制使用 XDG 门户。

故障排除

主题在 GTK 应用程序中不生效

如果您设置的样式或主题引擎没有在 GTK 应用程序中显示,很可能是因为某些原因导致 GTK 设置文件未加载。您可以按照以下步骤检查系统加载这些文件的预期路径。

$ export | grep gtk

通常,预期文件对于 GTK1 应为 ~/.gtkrc,对于 GTK 2.x 应为 ~/.gtkrc2.0~/.gtkrc2.0-kde

系统升级后 GTK 应用程序不再使用 svg (breeze) 图标

尝试运行以下命令来解决此问题

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

GTK 应用程序无法完全应用 KDE 系统设置

为了进一步在 GTK 应用程序上集成 Plasma 设置,您可以 安装 gnome-settings-daemongsettings-desktop-schemasgsettings-qt5。这将为 GTK 提供适当的 Qt 绑定。

kde-gtk-config 的“系统设置 > 应用程序样式 > GTK”菜单缺失

kde-gtk-config 损坏且“应用程序样式 > GTK”菜单从系统设置中缺失时,可以选择 GTK 配置工具(如 lxappearancenwg-look)来配置 GTK 2 和 GTK 3 样式。lxappearance 是桌面无关的,即使它源自 LXDE 项目(它不需要 LXDE 桌面的其他部分)。nwg-look 是一个 GTK3 设置编辑器,旨在在基于 wlroots 的 Wayland 环境中正常工作。其外观和感觉深受 LXAppearance 的影响,但 nwg-look 旨在解决一些使用中的不便。

Dolphin 的主题与 Nautilus 不匹配

请查看 Dolphin#Mismatched folder view background colors 小节,了解如何处理怪异的颜色。

未启用 KDE Plasma XDG 桌面门户

按照 XDG Desktop Portal#Force desktop environment 的说明,将 XDG_CURRENT_DESKTOP=KDE 设置进去。

Qt5:Kvantum 在 Qt 设置程序中作为样式不可用

确保已安装 kvantum-qt5

QT_QPA_PLATFORMTHEME=kde 无法应用到 KDE 门户

确保为 systemd 服务设置了 QT_QPA_PLATFORMTHEME=kde。由于 KDE 门户是通过 dbus 调用由 systemd 启动的 [5],您可以使用以下配置在 Wayland 会话中设置此变量。

~/.config/environment.d/envvars.conf
QT_QPA_PLATFORMTHEME=kde

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.