「Qt と GTK アプリケーションの外観の統合」の版間の差分
Kusakata.bot (トーク | 投稿記録) (Pkg/AUR テンプレートの更新) |
(→テーマエンジン: 英語版に追従) |
||
50行目: | 50行目: | ||
* Qt 5 の場合、{{Pkg|qt5-styleplugins}} をインストールし、次の[[環境変数#グラフィカルアプリケーション|環境変数]]を設定することで有効にできます: {{ic|1=QT_QPA_PLATFORMTHEME='gtk2'}}。 |
* Qt 5 の場合、{{Pkg|qt5-styleplugins}} をインストールし、次の[[環境変数#グラフィカルアプリケーション|環境変数]]を設定することで有効にできます: {{ic|1=QT_QPA_PLATFORMTHEME='gtk2'}}。 |
||
− | 完全な統合をするには、GTK+ 2 と GTK+ 3 の両方をサポートしている [[GTK+#テーマ|GTK+ テーマ]]を設定する必要があります。 |
+ | 完全な統合をするには、GTK+ 2 と GTK+ 3 の両方をサポートしている [[GTK+#テーマ|GTK+ テーマ]]を設定する必要があります。上の設定を有効にすると描画に不具合が生じる場合、GTK+ テーマを変更してください。 |
+ | |||
+ | === QGnomePlatform === |
||
+ | |||
+ | この Qt 5 プラットフォームテーマでは、GNOME での外観の設定が Qt アプリケーションに適用されます。{{AUR|qgnomeplatform}} か {{AUR|qgnomeplatform-git}} を[[インストール]]した上で、別途スタイルを[[Qt と GTK アプリケーションの外観の統合#Qt と GTK+ 両方のためのスタイル]]を参考にインストールしてください。 |
||
+ | |||
+ | GNOME 3.20 以降では自動的に有効化されます。それ以前では {{ic|1=QT_QPA_PLATFORMTHEME=gnome}} と設定すると有効になります。 |
||
== Qt と GTK+ 両方のためのスタイル == |
== Qt と GTK+ 両方のためのスタイル == |
2020年9月14日 (月) 18:42時点における版
Qt と GTK+ ベースのプログラムは異なるウィジェットツールキットを使ってグラフィカルユーザーインターフェースを表示しています。それぞれにデフォルトで異なるテーマ・スタイル・アイコンセットが存在するため、"ルックアンドフィール"は著しく乖離してしまいます。この記事ではデスクトップエクスペリエンスを統合するために Qt と GTK+ のアプリケーションの外観を似たようにする方法を説明しています。
概要
2つのツールキットで同じような見た目を表示するには以下を修正する必要が出てきます:
- テーマ: アプリケーションやウィジェットセットなどの外観のカスタマイズ。テーマは通常、スタイル・アイコンテーマ・カラーテーマから成ります。
- スタイル: ウィジェットセットのグラフィカルレイアウトと外観。
- アイコンテーマ: グローバルアイコンのセット。
- カーソルテーマ: スタイルと合わせて使われるグローバルカラーのセット。
外観の統一のために取れる方法は様々です:
- 特殊なテーマエンジンを使って、他のグラフィカルツールキットの見た目をメインのツールキットに合うように仲介させる。
- 下で説明しているツールを使って GTK+ と Qt のスタイルを別個に修正し、同じような見た目のテーマ (スタイル・カラー・アイコン・カーソル・フォント) を選択する。
テーマエンジン
テーマエンジンは複数のツールキット間でテーマ (アイコンは除く) を翻訳する薄いレイヤー API として考えることができます。これらのエンジンはプロセスに余分なコードを追加するため、この種の解決方法がネイティブのスタイルを使うのと比べ最適なのかどうかは議論の余地があります。
QGtkStyle
この 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 アプリケーションに適用されます。qgnomeplatformAUR か qgnomeplatform-gitAUR をインストールした上で、別途スタイルをQt と GTK アプリケーションの外観の統合#Qt と GTK+ 両方のためのスタイルを参考にインストールしてください。
GNOME 3.20 以降では自動的に有効化されます。それ以前では QT_QPA_PLATFORMTHEME=gnome
と設定すると有効になります。
Qt と GTK+ 両方のためのスタイル
統合のために、Qt と GTK+ 両方で提供されているウィジェットスタイルのセットが存在し、全ての主要なバージョンが含まれています。このようなスタイルを使うことで、アプリケーションが使っているツールキットに関係なく全てのアプリケーションの見た目を一つにすることが可能です。
Breeze
Breeze は Plasma 5 のデフォルトの Qt スタイルです。Qt5 のスタイルは breeze パッケージで、Qt4 のスタイルは breeze-kde4AUR パッケージでインストールできます。Breeze と似ている GTK+ 2 と GTK+ 3 のテーマは breeze-gtk パッケージでインストールできます。
パッケージをインストールしたら、GTK+ の設定ツールを使って GTK+ のテーマを変更してください。
Adwaita
Adwaita はデフォルトの GNOME のテーマです。gnome-themes-standard[リンク切れ: パッケージが存在しません] パッケージでインストールでき、GTK+ 2 と GTK+ 3 のテーマが含まれています。デフォルトでは、Qt アプリケーションには GTK+ 2 のテーマが使われます (#QGtkStyle を使用)。
ネイティブの Qt テーマを GTK+ 3 の Adwaita のようにしたいときは adwaita-qt を見て下さい。Qt 5 バージョンは adwaita-qt5AUR[リンク切れ: パッケージが存在しません] パッケージで、Qt 4 バージョンは adwaita-qt4AUR パッケージでインストールできます。
デフォルトに設定するときは、Qt 5 では qt5ct を、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 %U
をExec=kgtk-wrapper gimp-2.8 %U
に置き換えて下さい。
指定のテーマでアプリケーションを起動する
カスタムスタイルを特定の 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 を使っていないなら ~/.xinitrc
で export 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" ...
それから特定のアプリケーションを使うか手動で ~/.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
を手動で挿入することで解決できます。
以上の手順が上手く行かないときは、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