「Qt と GTK アプリケーションの外観の統合」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎テーマエンジン: 英語版に追従)
(→‎Kvantum: 英語版より追加)
(同じ利用者による、間の1版が非表示)
57行目: 57行目:
   
 
GNOME 3.20 以降では自動的に有効化されます。それ以前では {{ic|1=QT_QPA_PLATFORMTHEME=gnome}} と設定すると有効になります。
 
GNOME 3.20 以降では自動的に有効化されます。それ以前では {{ic|1=QT_QPA_PLATFORMTHEME=gnome}} と設定すると有効になります。
  +
  +
=== Kvantum ===
  +
Kvantum {{Pkg|kvantum-qt5}} は SVG ベースの Qt5 テーマです。Adapta, Arc, Ambiance, Materia GTK テーマと同様の Qt テーマが含まれています。
   
 
== Qt と GTK+ 両方のためのスタイル ==
 
== Qt と GTK+ 両方のためのスタイル ==
69行目: 72行目:
   
 
パッケージをインストールしたら、[[GTK+#設定ツール|GTK+ の設定ツール]]を使って GTK+ のテーマを変更してください。
 
パッケージをインストールしたら、[[GTK+#設定ツール|GTK+ の設定ツール]]を使って GTK+ のテーマを変更してください。
  +
  +
KDE Plasma を利用している場合は、KDE システム設定の ''System Settings > Application Style > Configure GNOME/GTK Application Style…'' にて GTK の設定が反映されるようにしてください。
  +
もしくは、{{Pkg|kde-gtk-config}} をインストールしてコマンドラインから実行して設定することもできます。
   
 
=== Adwaita ===
 
=== Adwaita ===
   
Adwaita はデフォルトの GNOME のテーマです。{{Pkg|gnome-themes-standard}}{{Broken package link|パッケジが存在しせん}} パッケージでインストールでき、GTK+ 2 と GTK+ 3 のテーマ含まれています。デフォルトでは、Qt アプリケーションには GTK+ 2 のテーマが使われます ([[#QGtkStyle]] を使用)。
+
Adwaita はデフォルトの GNOME のテーマです。GTK+ 3 のテマは標準で含れており、GTK+ 2 のテーマは {{Pkg|gnome-themes-extra}} に含まれています。デフォルトでは、Qt アプリケーションには GTK+ 2 のテーマが使われます ([[#QGtkStyle]] を使用)。
   
ネイティブの Qt テーマを GTK+ 3 の Adwaita のようにしたいときは [https://github.com/MartinBriza/adwaita-qt adwaita-qt] を見て下さい。Qt 5 バージョンは {{Aur|adwaita-qt5}}{{Broken package link|パッケージが存在しません}} パッケージで、Qt 4 バージョンは {{Aur|adwaita-qt4}} パッケージで[[インストール]]できます。
+
ネイティブの Qt テーマを GTK+ 3 の Adwaita のようにしたいときは [https://github.com/MartinBriza/adwaita-qt adwaita-qt] を見て下さい。Qt 5 バージョンは {{Aur|adwaita}} パッケージで、Qt 4 バージョンは {{Aur|adwaita-qt4}} パッケージで[[インストール]]できます。
   
デフォルトに設定するときは、Qt 5 では {{Pkg|qt5ct}} を、Qt 4 では ({{AUR|qt4}} パッケージに含まれている) {{ic|qtconfig-qt4}} を使います。
+
デフォルトに設定するときは、Qt 5 では {{Pkg|qt5ct}} パッケージか、{{ic|1=QT_STYLE_OVERRIDE=adwaita}} [[環境変数]]を使います。
  +
Qt 4 では ({{AUR|qt4}} パッケージに含まれている) {{ic|qtconfig-qt4}} を使います。
   
 
== ヒントとテクニック ==
 
== ヒントとテクニック ==

2020年9月24日 (木) 12:10時点における版

関連記事

QtGTK+ ベースのプログラムは異なるウィジェットツールキットを使ってグラフィカルユーザーインターフェースを表示しています。それぞれにデフォルトで異なるテーマ・スタイル・アイコンセットが存在するため、"ルックアンドフィール"は著しく乖離してしまいます。この記事ではデスクトップエクスペリエンスを統合するために Qt と GTK+ のアプリケーションの外観を似たようにする方法を説明しています。

概要

2つのツールキットで同じような見た目を表示するには以下を修正する必要が出てきます:

  • テーマ: アプリケーションやウィジェットセットなどの外観のカスタマイズ。テーマは通常、スタイル・アイコンテーマ・カラーテーマから成ります。
  • スタイル: ウィジェットセットのグラフィカルレイアウトと外観。
  • アイコンテーマ: グローバルアイコンのセット。
  • カーソルテーマ: スタイルと合わせて使われるグローバルカラーのセット。

外観の統一のために取れる方法は様々です:

  • 特殊なテーマエンジンを使って、他のグラフィカルツールキットの見た目をメインのツールキットに合うように仲介させる。
  • 下で説明しているツールを使って GTK+ と Qt のスタイルを別個に修正し、同じような見た目のテーマ (スタイル・カラー・アイコン・カーソル・フォント) を選択する。

テーマエンジン

テーマエンジンは複数のツールキット間でテーマ (アイコンは除く) を翻訳する薄いレイヤー API として考えることができます。これらのエンジンはプロセスに余分なコードを追加するため、この種の解決方法がネイティブのスタイルを使うのと比べ最適なのかどうかは議論の余地があります。

QGtkStyle

ノート: QGtkStyle は qt5-base Qt 5.7.0 [1] から除去され、 qt5-styleplugins [2] に追加されました。
警告: GTK+ 2 のテーマによっては、フォントが透過してしまったりウィジェットがうまく調和しないなどのレンダリング問題が発生することがあります。

この Qt スタイルは GTK+ 2 を使って全てのコンポーネントを表示することで GNOME などの GTK+ ベースの環境とブレンドします。Qt 4.5 から、このスタイルは Qt に含まれているようになっています。gtk2 をインストール・設定してください。

QGtkStyle は 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-styleplugins をインストールし、次の環境変数を設定することで有効にできます: QT_QPA_PLATFORMTHEME='gtk2'

完全な統合をするには、GTK+ 2 と GTK+ 3 の両方をサポートしている GTK+ テーマを設定する必要があります。上の設定を有効にすると描画に不具合が生じる場合、GTK+ テーマを変更してください。

QGnomePlatform

この Qt 5 プラットフォームテーマでは、GNOME での外観の設定が Qt アプリケーションに適用されます。qgnomeplatformAURqgnomeplatform-gitAURインストールした上で、別途スタイルをQt と GTK アプリケーションの外観の統合#Qt と GTK+ 両方のためのスタイルを参考にインストールしてください。

GNOME 3.20 以降では自動的に有効化されます。それ以前では QT_QPA_PLATFORMTHEME=gnome と設定すると有効になります。

Kvantum

Kvantum kvantum-qt5 は SVG ベースの Qt5 テーマです。Adapta, Arc, Ambiance, Materia GTK テーマと同様の Qt テーマが含まれています。

Qt と GTK+ 両方のためのスタイル

統合のために、Qt と GTK+ 両方で提供されているウィジェットスタイルのセットが存在し、全ての主要なバージョンが含まれています。このようなスタイルを使うことで、アプリケーションが使っているツールキットに関係なく全てのアプリケーションの見た目を一つにすることが可能です。

ノート: バージョン 3.16 から、GTK+ 3 は CSS を使用しないテーマを サポートしなくなりました 。そのため Oxygen-Gtk などのスタイルはもはや 使うことができなくなっています

Breeze

Breeze は Plasma 5 のデフォルトの Qt スタイルです。Qt5 のスタイルは breeze パッケージで、Qt4 のスタイルは breeze-kde4AUR パッケージでインストールできます。Breeze と似ている GTK+ 2 と GTK+ 3 のテーマは breeze-gtk パッケージでインストールできます。

パッケージをインストールしたら、GTK+ の設定ツールを使って GTK+ のテーマを変更してください。

KDE Plasma を利用している場合は、KDE システム設定の System Settings > Application Style > Configure GNOME/GTK Application Style… にて GTK の設定が反映されるようにしてください。 もしくは、kde-gtk-config をインストールしてコマンドラインから実行して設定することもできます。

Adwaita

Adwaita はデフォルトの GNOME のテーマです。GTK+ 3 のテーマは標準で含まれており、GTK+ 2 のテーマは gnome-themes-extra に含まれています。デフォルトでは、Qt アプリケーションには GTK+ 2 のテーマが使われます (#QGtkStyle を使用)。

ネイティブの Qt テーマを GTK+ 3 の Adwaita のようにしたいときは adwaita-qt を見て下さい。Qt 5 バージョンは adwaitaAUR パッケージで、Qt 4 バージョンは adwaita-qt4AUR パッケージでインストールできます。

デフォルトに設定するときは、Qt 5 では qt5ct パッケージか、QT_STYLE_OVERRIDE=adwaita 環境変数を使います。 Qt 4 では (qt4AUR パッケージに含まれている) qtconfig-qt4 を使います。

ヒントとテクニック

GTK+ アプリケーションで KDE ファイルダイアログ

KGtk は LD_PRELOAD を使って GTK+ 2.x のアプリで KDE のファイルダイアログ (開く、保存など) を強制するラッパースクリプトです。KDE を使用していてそのファイルダイアログが GTK+ よりも好ましいときは AUR から kgtkAUR をインストールできます。インストールした後、2つの方法で kgtk-wrapper を使って GTK+ 2.x アプリケーションを実行することが可能です (例として GIMP を使います):

  • kgtk-wrapper を直接呼び出し、引数として GTK+ 2.x バイナリを指定する:
$ /usr/bin/kgtk-wrapper gimp
  • /usr/share/applications/ にある KDE の .desktop ショートカットを修正して Exec に kgtk-wrapper を前に付ける。
例えば GIMP なら、/usr/share/applications/gimp.desktop ショートカットファイルを編集して Exec=gimp-2.8 %UExec=kgtk-wrapper gimp-2.8 %U に置き換えて下さい。
ノート: GTK+ アプリケーションには KGtk ラッパーと互換性がないものがあります (例: Chromium)。場合によってはラッパーによってアプリケーションがクラッシュします (例: Firefox)。さらに KDM など他のアプリケーションに影響を与えることもあります (Thunderbird などと一緒に使っている場合)。

指定のテーマでアプリケーションを起動する

カスタムスタイルを特定の GTK+ 2.x アプリケーションで使用することができます。アプリケーションを指定したテーマで起動するには:

GTK2_RC_FILES=/usr/share/themes/QtCurve/gtk-2.0/gtkrc firefox

このコマンドでは QtCurve テーマで Firefox が起動します。

Qt アプリで GTK+ のアイコンテーマを使う

KDE を使っている場合、kde-gtk-config をインストールして System Settings > Application Style > GTK からアイコンテーマを選択してください。

GNOME を使っていない場合は、gconf-editor を実行して desktop > gnome > interface から icon_theme キーを設定にあわせて変更してください。GNOME を使っていないなら ~/.xinitrcexport DESKTOP_SESSION=gnome を設定する必要があることもあります。LightDM を使っている場合は /etc/environment に設定してください。

KDE における GTK アプリのサブピクセルレンダリングの改善

GTK アプリのサブピクセルレンダリングがネイティブの KDE Qt アプリケーションよりもはっきりとしない場合、以下の行を $XDG_CONFIG_HOME/fontconfig/fonts.conf に追加してみて下さい (<fontconfig> タグの間):

<match target="font">
    <edit mode="assign" name="lcdfilter">
        <const>lcddefault</const>
    </edit>
</match>

詳しくはフォント設定#LCD フィルターを参照。

トラブルシューティング

Qt アプリケーションが QGtkStyle を使わない

GTK+ が GTK+-Qt エンジンを使っている場合、Qt は QGtkStyle を正しく適用しません。環境変数 GTK2_RC_FILES に記載された GTK+ 設定ファイルを読み込むことで Qt は GTK+-Qt エンジンが使われるかどうか判定します。環境変数が正しく設定されていないときは、Qt はエンジンを使っているとして仮定し、GTK+ スタイルの Clearlooks を使うように QGtkStyle を設定し、エラーメッセージを出力します:

QGtkStyle cannot be used together with the GTK_Qt engine.

他にも、シェルから qtconfig-qt4 を起動して GTK+ スタイルを選択するとエラーが表示されることがあります:

QGtkStyle was unable to detect the current GTK+ theme.

このスレッドによれば、この問題を解決するには libgnomeuiAUR をインストールする必要があります。xfce と同じように、これにはグラフィカルツールでテーマを変更する度にファイルを編集する必要がないという利点もあります。

Openbox や GNOME 以外の環境を使っているユーザーもこの問題に出くわす可能性があります。問題を解決するには、まず .xinitrc ファイルに以下を追加してください:

.xinitrc
...
export GTK2_RC_FILES="$HOME/.gtkrc-2.0"
...
ノート:
  • この行を追加するのはウィンドウマネージャを起動する行の前にしてください。
  • コロンで分割して複数のパスを追加することも可能です。
  • ~ ではなく $HOME を使うようにしてください。前者では正しくユーザーのホームディレクトリにならないためです。

それから特定のアプリケーションを使うか手動で ~/.gtkrc-2.0 を編集して使いたいテーマを指定してください、以下を追加します:

.gtkrc-2.0
...
gtk-theme-name="[name of theme]"
...

ツールによっては ~/.gtkrc-2.0 に以下のような include ディレクティブしか挿入しないことがあります:

.gtkrc-2.0
...
include "/usr/share/themes/SomeTheme/gtk-2.0/gtkrc"
...

これでは QGtkStyle の全てのバージョンで認識されません。この問題は ~/.gtkrc-2.0 ファイルに上の例のように gtk-theme-name を手動で挿入することで解決できます。

ノート: スタイルを変更するアプリケーションは、テーマを変更したときに ~/.gtkrc-2.0 ファイルを書き換えます。

以上の手順が上手く行かないときは、gconf をインストールして次のコマンドを実行してください:

gconftool-2 --set --type string /desktop/gnome/interface/gtk_theme [name of theme]

さらに、同じアイコンやカーソルを設定したい場合、それらも指定してください。

gconftool-2 --set --type string /desktop/gnome/interface/icon_theme Faenza-Dark

上のコマンドはアイコンテーマを /usr/share/icons/Faenza-Dark にある Faenza-Dark に設定します。カーソルテーマを設定するには最初に gconf の値を設定してください。

gconftool-2 --set --type string /desktop/gnome/peripherals/mouse/cursor_theme Adwaita

それから以下の内容で /usr/share/icons/default/index.theme ファイルを作成してください:

[Icon Theme]
Inherits=Adwaita

GTK+ アプリでテーマが使えない

設定したスタイルやテーマエンジンが GTK アプリケーションで表示されない場合は、おそらく GTK+ の設定ファイルが何らかの理由でロードされていません。次を実行することでシステムが設定ファイルをどこにあると期待しているか確認できます:

$ export | grep gtk

通常は期待されるファイルは GTK1 は ~/.gtkrc、GTK+ 2.x は ~/.gtkrc2.0 または ~/.gtkrc2.0-kde です。

システムをアップグレードすると SVG (Breeze) アイコンが GTK+ アプリで使用されない

次のコマンドを実行して、gdk-pixbuf のキャッシュ情報を更新してみてください [3]:

# gdk-pixbuf-query-loaders --update-cache