统一 Qt 和 GTK 应用程序的外观
基于 Qt 和 GTK 的程序使用不同的图形库来渲染图形化用户界面,各自具有不同的主题、风格和图标,所以观感明显有所不同。这篇文章将使你的 Qt 和 GTK 程序看起来更相似,以此获得更加现代化、集成化的桌面体验。
介绍[编辑 | 编辑源代码]
要想在不同的图形库之间获得相似的外观,你通常需要修改以下内容:
- 主题——应用程序和组件等元素的自定义外观。通常包含一套风格、图标主题和颜色主题。
- 风格——组件的布局和样式。
- 图标主题——全局图标。
- 颜色主题——与风格相适应的全局颜色样式。
你可以选择下面的不同方法:
- 使用下面列出的,适用于各个图形库的工具分别修改 Qt 和 GTK 的主题,以选择外观相似的主题(样式,颜色,图标,光标,字体)。
- 使用特殊的主题引擎,该引擎作为中间人修改其他图形库的主题,以匹配您的主要图形库。
Qt 和 GTK 通用的主题[编辑 | 编辑源代码]
下面列出了几种主题,Qt 和 GTK 都可使用,并且风格统一。这些主题适配了 Qt 和 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[编辑 | 编辑源代码]
此 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
为了完全统一,请确保配置的 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。
$ 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 小节以解决颜色奇怪的问题