Qt 和 GTK 应用程序的统一外观
Qt 和 GTK 应用程序都使用不同的控件工具包来渲染图形用户界面。它们各自默认带有不同的主题、风格和图标集,这使得“外观和感觉”差异显著。本文将帮助您使 Qt 和 GTK 应用程序看起来相似,以获得更流畅和集成的桌面体验。
概述
为了在工具包之间获得相似的外观,您很可能需要修改以下内容
- 主题:应用程序、控件集等的自定义外观。它通常包含风格、图标主题和颜色主题。
- 风格:控件集在图形布局和外观上的样子。
- 图标主题:一组全局图标。
- 颜色主题:与风格配合使用的一组全局颜色。
您可以选择多种方法
- 使用下方列出的工具,分别修改 GTK 和 Qt 风格,并以选择外观相似的主题(风格、颜色、图标、光标、字体)为目标。
- 使用一个特殊的 主题引擎,它会介入对另一个图形工具包的修改,以匹配您的主工具包。
Qt 和 GTK 的风格
为了实现集成,有一些控件风格集可用,这些风格集是为 Qt 和 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-kdeAUR 和 qt6ct-kdeAUR 将 Breeze 应用于 Qt 应用程序,您还可以将颜色方案更改为 Breeze-Dark。
GTK 主题的 Qt 移植版
这些是最初为 GTK 环境创建,后来移植到 Qt 的主题。
Adwaita
Adwaita 是 GNOME 的默认主题。GTK 3 版本包含在 gtk3 包中,而 GTK 2 版本包含在 gnome-themes-extra-gtk2AUR 中。 adwaita-qt 是 Adwaita 主题的 Qt 移植版。与 #QGtkStyle 模仿 GTK 2 主题不同,它提供了一个看起来像 GTK 3 Adwaita 的原生 Qt 风格。可以通过 adwaita-qt5-gitAUR 和 adwaita-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、Libadwaita 和 Materia。更多主题可以在 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 GUI。
主题引擎
可以将“主题引擎”视为一个薄层 API,它在一种或多种工具包之间转换主题(不包括图标)。这些引擎在过程中添加了一些额外的代码,并且可以说这种解决方案不如使用原生风格优雅和优化。
QGtk3Style
这是从 qt5-base 5.7.0 版本 [2] 和 qt6-base 开始内置的一个平台主题。它可以用来根据当前的 GTK3 风格来定制 Qt5 和 Qt6 应用程序。可以通过设置以下 环境变量 来启用:QT_QPA_PLATFORMTHEME=gtk3。对于 Adwaita 用户,可以与 #QAdwaitaDecorations 一起使用,以获得完整的外观。
QGtkStyle
此 Qt 风格使用 GTK 2 来渲染所有组件,以融入 GNOME 和类似的基于 GTK 的环境。从 Qt 4.5 开始,此风格包含在 Qt 中。它需要安装和配置 gtk2AUR。
这是 Cinnamon、GNOME 和 Xfce 的默认 Qt4 风格,以及 Cinnamon、GNOME、MATE、LXDE 和 Xfce 的默认 Qt5 风格。在其他环境中
- 对于 Qt4,可以通过 Qt Configuration (
qtconfig-qt4) 进行启用,在 Appearance > GUI Style 下选择 GTK。或者,编辑/etc/xdg/Trolltech.conf(系统范围)或~/.config/Trolltech.conf(用户特定)文件。
~/.config/Trolltech.conf
... [Qt] style=GTK+ ...
- 对于 Qt 5,可以通过安装 qt5-stylepluginsAUR 并设置以下 环境变量 来启用:
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-qt5AUR 和 qadwaitadecorations-qt6AUR 包安装。安装后,将环境变量设置为 QT_WAYLAND_DECORATION=adwaita。
QWhiteSurGtkDecorations
QWhiteSurGtkDecorations 是一个 Qt 装饰插件,为 Wayland 实现 WhiteSur-gtk 风格的客户端装饰。可以通过 qwhitesurgtkdecorations-qt5AUR 和 qwhitesurgtkdecorations-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 的值。请参阅 环境变量#Defining variables 以了解可能实现的所需结果。
$ 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 Desktop Portals。
安装 xdg-desktop-portal 和 xdg-desktop-portal-kde 作为第一步。
环境变量方法
历史上,设置环境变量 GTK_USE_PORTAL=1 对大多数应用程序来说已足够。一些较新的 GTK 应用程序可能使用 GDK_DEBUG=portals 替代(请参阅 GTK NEWS),而其他应用程序(如 Betterbird 128.5.2esr-bb19,正如 讨论 中提到的)仍然需要原始变量。您可能需要测试哪个变量适用于您的特定应用程序,或同时使用两者以确保最大兼容性。
配置方法
自 xdg-desktop-portal 1.18.0 起,建议直接配置 portal 系统。
设置首选的 portal 后端
这可以按用户或系统范围进行配置。
用户特定配置
创建配置文件目录
$ 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
强制 portal 服务使用桌面环境
这可确保 portal 服务使用正确的后端,而不考虑当前的桌面环境。
用户特定配置
创建覆盖目录
$ 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"
重启 portal 服务
重新加载 systemd 用户守护进程并重启 portal 服务
$ systemctl --user daemon-reload $ systemctl --user restart xdg-desktop-portal.service
此配置方法独立于当前的桌面环境,并且比仅依赖环境变量更能抵抗未来的更改,因此被认为更健壮。
应用程序兼容性
并非所有 GTK 应用程序都能正确支持 KDE 文件对话框
- 使用 electron 的应用程序应至少使用 electron 14(参见 #19159)并正确实现此功能。
- VSCode 有一个用于修复问题的拉取请求,请参阅 #126113。
- GIMP 尚未实现 portal 的使用,请参阅 bug 报告。
同步书签
仍然有很多 GTK 应用程序未能正确实现 portal(被放弃的应用程序,或作者专注于其他任务)。为了简化此类应用程序的文件选择,您至少可以同步 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 Portals
故障排除
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 系统设置
为了进一步将 Plasma 设置集成到 GTK 应用程序中,您可以 安装 gnome-settings-daemon、gsettings-desktop-schemas 和 gsettings-qt5。这将为 GTK 提供正确的 Qt 绑定。
kde-gtk-config "系统设置 > 应用程序风格 > GTK" 菜单缺失
当 kde-gtk-config 出现故障,并且“系统设置”中“应用程序风格 > GTK”菜单缺失时,可以选择 GTK 配置工具,如 lxappearance 和 nwg-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 Desktop Portal 未被使用
请遵循 XDG Desktop Portal#Force desktop environment,并设置 XDG_CURRENT_DESKTOP=KDE。
Qt5: 在 Qt 设置应用程序中 Kvantum 无法作为风格可用
请确保已安装 kvantum-qt5。