Qt 和 GTK 应用程序的统一外观
Qt 和 GTK 基础程序都使用不同的部件工具包来渲染图形用户界面。每个工具包默认都带有不同的主题、样式和图标集等,因此“外观和感觉”差异很大。本文将帮助您使 Qt 和 GTK 应用程序看起来相似,从而获得更流畅和集成的桌面体验。
概述
为了在工具包之间获得相似的外观,您很可能需要修改以下内容
- 主题:应用程序、部件集等的自定义外观。它通常由样式、图标主题和颜色主题组成。
- 样式:部件集的图形布局和外观。
- 图标主题:一组全局图标。
- 颜色主题:一组与样式结合使用的全局颜色。
您可以选择多种方法
- 使用下面列出的每个工具包的工具分别修改 GTK 和 Qt 样式,并旨在选择外观相似的主题(样式、颜色、图标、光标、字体)。
- 使用特殊主题引擎,它充当中间层,修改另一个图形工具包以匹配您的主要工具包。
Qt 和 GTK 的通用样式
有一些部件样式集可用于集成目的,其中为 Qt 和 GTK 编写和提供了构建版本,包括所有主要版本。有了这些,您可以让所有应用程序都具有一种外观,而不管它们是用哪个工具包编写的。
最初基于 Qt 的 GTK 程序主题
这些主题最初是为 Qt 环境创建的,但后来被移植到 GTK。
Breeze
Breeze 是 KDE Plasma 的默认 Qt 样式。可以使用 breeze 软件包和 breeze-gtk 软件包(用于 GTK 2 和 GTK 3)安装它。
安装后,您可以使用许多 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 中。adwaita-qt 是 Adwaita 主题的 Qt 移植版。与模仿 GTK 2 主题的 #QGtkStyle 不同,它提供了原生的 Qt 样式,使其看起来像 GTK 3 Adwaita。它可以分别使用 adwaita-qt4AUR、adwaita-qt5-gitAUR 和 adwaita-qt6-gitAUR 软件包为 Qt 4、5 和 6 版本安装。
要将 Qt 样式设置为默认样式
- 对于 Qt 5,可以通过设置以下环境变量启用它:
QT_STYLE_OVERRIDE=adwaita
。或者,使用 qt5ct 软件包。有关更详细的说明,请参阅 Qt#在非 KDE Plasma 环境下配置 Qt 5/6 应用程序。 - 对于 Qt4,可以使用Qt 配置 (
qtconfig-qt4
) 启用它,在外观 > GUI 样式下选择 adwaita。或者,编辑/etc/xdg/Trolltech.conf
(系统范围)或~/.config/Trolltech.conf
(用户特定)文件
~/.config/Trolltech.conf
... [Qt] style=adwaita ...
移植到 Kvantum 的 GTK 主题
Kvantum (kvantum) 是一个基于 SVG 的 Qt6 样式自定义器,它带有各种内置样式,包括一些流行的 GTK 主题(如 Adapta、Arc、Ambiance、Libadwaita 和 Materia)的版本。更多主题可以在 KDE 商店中找到。对于 Qt5,您还需要 kvantum-qt5 软件包。
Kvantum 作为 Qt 样式而不是 Qt 平台主题工作。要为所有 Qt 应用程序设置 Kvantum,请在 Qt6 的 qt6ct 或 Qt5 的 qt5ct 中设置它,或者使用环境变量 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 中。它需要安装和配置 gtk2。
这是 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 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
的值。有关获得所需结果的可能方法,请参阅 环境变量#定义变量。
$ awk -F= '/icon-theme/ {print $2}' ~/.gtkrc-2.0
为 KDE Plasma 下的 GTK3 应用程序添加标题栏和边框
要使 GNOME/GTK 应用程序显示 KDE/Plasma 标题栏和边框,请禁用客户端装饰,如 GTK#客户端装饰 中所述。
改善 KDE Plasma 下 GTK 应用程序的子像素渲染
请参阅 字体配置#LCD 过滤器。
KDE Plasma 下一致的文件对话框
为了拥有相同的文件对话框,可以使用 XDG Desktop Portal。
安装 xdg-desktop-portal 和 xdg-desktop-portal-kde 并设置 GTK_USE_PORTAL=1
环境变量。
请注意,目前并非所有 GTK 应用程序都正确支持 KDE 文件对话框。
使用 electron 的应用程序应至少使用 electron 14(参见 #19159)并正确实现此功能。
VSCode 有一个拉取请求用于修复问题,请参阅 #126113。
GIMP 尚未实现 portal 的使用,请参阅 错误报告。
$ awk -F\" '/<bookmark href="file/ {print $2}' < $HOME/.local/share/user-places.xbel > $HOME/.config/gtk-3.0/bookmarks
或者,为此目的使用 bookmarksync-gitAUR。在那里,您可以手动编辑书签并将其同步到两侧。
应用程序特定的设置
除了环境变量方法外,一些 GTK 应用程序还有自己的设置来强制使用 XDG Portal
故障排除
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-daemon、gsettings-desktop-schemas 和 gsettings-qt。这将为 GTK 提供正确的 Qt 绑定。
当 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 不太匹配
查看 文件夹视图背景颜色不匹配 部分,了解如何处理奇怪的着色。
未使用 KDE Plasma XDG Desktop Portal
按照 XDG Desktop Portal#强制桌面环境 中的 XDG_CURRENT_DESKTOP=KDE
进行操作。
Qt5:kvantum 在 Qt 设置应用中不可用作样式
确保已安装 kvantum-qt5。