Uniform look for Qt and GTK applications (简体中文)

From ArchWiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
翻译状态:本文是 Uniform look for Qt and GTK applications翻译。上次翻译日期:2021年3月4日。如果英文版本有所更改,则您可以帮助同步翻译。

基于 QtGTK 的程序使用不同的工具包来渲染图形化用户界面,各自带有不同的主题、风格和图标,所以观感就明显有所不同。这篇文章将帮助你体验让你的 Qt 和 GTK 程序看起来更现代化、集成化的桌面。

介绍

要想在不同的工具包之间获得相似的外观,你很可能需要修改以下内容:

  • 主题 - 包含一套风格、图标主题和颜色主题。
  • 风格 - 图形布置,观感。
  • 图标主题 - 一套整体的图标。
  • 颜色主题 - 一套连接风格的整体配色。

你可以有多种选择:

  • 使用下面列出的每个工具箱中的工具分别修改 Qt 和 GTK 的样式,以选择外观相似的主题(样式,颜色,图标,光标,字体)。
  • 使用特殊的主题引擎,该引擎将对其他图形工具箱的修改作为中介,以匹配您的主要工具箱。

Qt和GTK的样式

There are widget style sets available for the purpose of integration, where builds are written and provided for both Qt and GTK, all major versions included. With these, you can have one look for all applications regardless of the toolkit they had been written with.

提示: 你可能希望将用户定义的样式应用于root用户的应用, 参考GTK#Theme not applied to root applications and Qt#Theme not applied to root applications.
注意: 从3.16版本开始, GTK 3 不再支持 non-CSS 主题, 因此,以前的解决方案(例如Oxygen-Gtk)不再是可行的选择,参考[1]

Breeze

Breeze是KDE Plasma的默认Qt样式。它可以与Qt5的breeze,Qt4的breeze-kde4AUR以及GTK 2和GTK 3的breeze-gtk软件包一起安装。

安装后,您可以挑选GTK配置工具更改GTK主题。

如果当前运行的是KDE Plasma,请安装kde-gtk-config并从命令行运行它,或转到“系统设置>应用程序样式>GNOME应用程序样式(GTK)”进行GTK程序的样式配置。在GTK样式配置模块之外的“系统设置”中设置的字体,图标主题,光标和小部件样式将仅影响Qt。应该使用前面提到的模块手动设置GTK设置。

Adwaita

Adwaita是默认的GNOME主题。GTK 3版本包含在gtk3软件包中,而GTK 2版本包含在gnome-themes-extra中。 adwaita-qt是Adwaita主题的Qt接口。与模仿GTK 2主题的#QGtkStyle不同,它提供了本机Qt样式,使其看起来像GTK 3 Adwaita。可以分别安装Qt 4 adwaita-qt4AUR和Qt5adwaita-qtAUR版本的软件包。

要将Qt样式设置为默认值:

  • 对于Qt4,可以使用Qt配置(qtconfig-qt4)启用它,在外观>GUI样式中选择adwaita。或者,编辑/etc/xdg/Trolltech.conf(系统范围)或~/.config/Trolltech.conf(用户特定)文件:
~/.config/Trolltech.conf
...
[Qt]
style=adwaita
...

Kvantum

Kvantum(kvantum-qt5)是用于Qt5的可定制的基于SVG的主题引擎,具有多种内置样式,包括一些流行的GTK主题的版本,例如Adapta,Arc,Ambiance和Materia。

主题引擎

主题引擎可以认为是从一个或多个工具翻译主题(图标除外)很小的API层。这些引擎为进程添加额外的代码,这种解决方案不是非常精致更多为本来风格优化。

QGtkStyle

注意: QGtkStyle已从qt5-base中删除 5.7.0 [2]现已添加到qt5-stylepluginsAUR[3]
警告: 根据GTK 2主题,此样式可能会导致呈现问题,例如透明字体或小部件不一致。

此Qt样式使用GTK 2渲染所有组件以便于与GNOME和类似基于GTK的环境相协调。从Qt 4.5开始,此样式包含在Qt中。它要求安装gtk2并进行配置。

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

  • For Qt4, it can be enabled with Qt Configuration (qtconfig-qt4), choose GTK under Appearance > GUI Style. Alternatively, edit the /etc/xdg/Trolltech.conf (system-wide) or ~/.config/Trolltech.conf (user-specific) file:
  • 对于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和GTK3。如果将Qt配置为使用GTK2后导致首选主题渲染不一致,请安装gtk-theme-switch2AUR,然后选择一个主题。

QGnomePlatform

Qt 5 平台主题适用于 Qt 应用程序的 GNOME 外观设置。它可以与 qgnomeplatformAUR 软件包一起安装,也可以与开发版本的 qgnomeplatform-gitAUR 软件包一起安装。它本身不提供 Qt 样式,而是需要同时支持 Qt 和 GTK 样式。 从 3.20 版开始,此平台主题已在 GNOME 中自动启用。对于其他系统,可以通过设置以下环境变量来启用它:QT_QPA_PLATFORMTHEME=qgnomeplatform.。

Tips and tricks

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

如果您正在运行Plasma,请安装kde-gtk-config,然后在系统设置 > 应用程序风格 > 应用样式 > 配置GNOME/GTK应用样式下选择图标主题。

如果您使用的是GNOME,请首先检查是否安装了dconf-editor

然后,运行dconf-editor,然后在组织 > gnome > 桌面 > 界面 下查找icon-theme键,并将其更改为您的首选图标主题。

如果您使用的不是GNOME,例如,如果您使用的是i3-wm,请首先安装dconf-editor

然后,运行dconf-editor,然后在 组织 > gnome > 桌面 > 界面下查找icon-theme键,并将其更改为您的图标主题。

由于您使用的不是GNOME,因此可能需要在个人的配置文件中设置DESKTOP_SESSION的值。 为此,请在终端中执行以下代码,然后重新启动系统。

$ echo 'export DESKTOP_SESSION=gnome' >> /etc/profile

或者

export DESKTOP_SESSION=gnome设置在~/.xinitrc中的某个位置,或者在Xprofile中使用一个Display manager

注意: 如果未应用图标主题,则可能要检查您输入的首选主题名称是否格式正确。例如,如果要将当前活动的图标主题应用于QT应用程序,则可以使用以下命令找到其名称的正确格式:
$ 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-portalxdg-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应用也有不匹配的窗口装饰外观

为了有一个匹配的窗口装饰外观,您必须安装qgnomeplatformAUR,并设置以下环境变量environment variable:QT_QPA_PLATFORMTHEME='gnome'

GTK 应用程序不能完全使用 KDE 系统设置

为了进一步整合 GTK 应用程序上的 Plasma 设置,可能需要安装 gnome-settings-daemongsettings-desktop-schemasgsettings-qt,这将为 GTK 提供适当的 Qt 绑定。

安装kde-gtk-config后,没有“系统设置>应用程序样式> GTK”菜单

使用kde-gtk-config时,可以选择lxappearance之类的GTK configuration tools来配置GTK 2和GTK 3样式。

即使它来自LXDE项目,它也是与桌面无关的(它不需要LXDE桌面的其他部分)