跳转至内容

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

来自 ArchWiki

QtGTK 应用程序都使用不同的控件工具包来渲染图形用户界面。它们各自默认带有不同的主题、风格和图标集,这使得“外观和感觉”差异显著。本文将帮助您使 Qt 和 GTK 应用程序看起来相似,以获得更流畅和集成的桌面体验。

概述

为了在工具包之间获得相似的外观,您很可能需要修改以下内容

  • 主题:应用程序、控件集等的自定义外观。它通常包含风格、图标主题和颜色主题。
  • 风格:控件集在图形布局和外观上的样子。
  • 图标主题:一组全局图标。
  • 颜色主题:与风格配合使用的一组全局颜色。

您可以选择多种方法

  • 使用下方列出的工具,分别修改 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] (请在 Talk:Uniform look for Qt and GTK applications 中讨论)

Adwaita 是 GNOME 的默认主题。GTK 3 版本包含在 gtk3 包中,而 GTK 2 版本包含在 gnome-themes-extra-gtk2AUR 中。 adwaita-qt 是 Adwaita 主题的 Qt 移植版。与 #QGtkStyle 模仿 GTK 2 主题不同,它提供了一个看起来像 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、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

注意 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 Configuration (qtconfig-qt4) 进行启用,在 Appearance > GUI Style 下选择 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 使用 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 的值。请参阅 环境变量#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 Desktop Portals

安装 xdg-desktop-portalxdg-desktop-portal-kde 作为第一步。

环境变量方法

历史上,设置环境变量 GTK_USE_PORTAL=1 对大多数应用程序来说已足够。一些较新的 GTK 应用程序可能使用 GDK_DEBUG=portals 替代(请参阅 GTK NEWS),而其他应用程序(如 Betterbird 128.5.2esr-bb19,正如 讨论 中提到的)仍然需要原始变量。您可能需要测试哪个变量适用于您的特定应用程序,或同时使用两者以确保最大兼容性。

配置方法

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

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-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 Desktop Portal 未被使用

请遵循 XDG Desktop Portal#Force desktop environment,并设置 XDG_CURRENT_DESKTOP=KDE

Qt5: 在 Qt 设置应用程序中 Kvantum 无法作为风格可用

请确保已安装 kvantum-qt5

© . 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.