「Qt と GTK アプリケーションの外観の統合」の版間の差分
Kusanaginoturugi (トーク | 投稿記録) (→ヒントとテクニック: delele old secion. add new section.) |
Kusanaginoturugi (トーク | 投稿記録) (→Qt アプリケーションが QGtkStyle を使わない: delete section.) |
||
135行目: | 135行目: | ||
== トラブルシューティング == |
== トラブルシューティング == |
||
− | |||
− | === Qt アプリケーションが QGtkStyle を使わない === |
||
− | |||
− | GTK+ が [[#GTK+-Qt エンジン|GTK+-Qt エンジン]]を使っている場合、Qt は QGtkStyle を正しく適用しません。環境変数 {{ic|GTK2_RC_FILES}} に記載された GTK+ 設定ファイルを読み込むことで Qt は GTK+-Qt エンジンが使われるかどうか判定します。環境変数が正しく設定されていないときは、Qt はエンジンを使っているとして仮定し、GTK+ スタイルの ''Clearlooks'' を使うように QGtkStyle を設定し、エラーメッセージを出力します: |
||
− | |||
− | QGtkStyle cannot be used together with the GTK_Qt engine. |
||
− | |||
− | 他にも、シェルから {{ic|qtconfig-qt4}} を起動して GTK+ スタイルを選択するとエラーが表示されることがあります: |
||
− | |||
− | QGtkStyle was unable to detect the current GTK+ theme. |
||
− | |||
− | [https://bbs.archlinux.org/viewtopic.php?id=99175&p=1 このスレッド]によれば、この問題を解決するには {{AUR|libgnomeui}} をインストールする必要があります。xfce と同じように、これにはグラフィカルツールでテーマを変更する度にファイルを編集する必要がないという利点もあります。 |
||
− | |||
− | [[Openbox]] や GNOME 以外の環境を使っているユーザーもこの問題に出くわす可能性があります。問題を解決するには、まず {{ic|.xinitrc}} ファイルに以下を追加してください: |
||
− | {{hc|.xinitrc|<nowiki> |
||
− | ... |
||
− | export GTK2_RC_FILES="$HOME/.gtkrc-2.0" |
||
− | ... |
||
− | </nowiki>}} |
||
− | |||
− | {{Note| |
||
− | * この行を追加するのはウィンドウマネージャを起動する行の前にしてください。 |
||
− | * コロンで分割して複数のパスを追加することも可能です。 |
||
− | * {{ic|~}} ではなく {{ic|$HOME}} を使うようにしてください。前者では正しくユーザーのホームディレクトリにならないためです。 |
||
− | }} |
||
− | |||
− | それから[[#GTK2 スタイル|特定のアプリケーション]]を使うか手動で {{ic|~/.gtkrc-2.0}} を編集して使いたいテーマを指定してください、以下を追加します: |
||
− | {{hc|.gtkrc-2.0|<nowiki> |
||
− | ... |
||
− | gtk-theme-name="[name of theme]" |
||
− | ... |
||
− | </nowiki>}} |
||
− | |||
− | ツールによっては {{ic|~/.gtkrc-2.0}} に以下のような include ディレクティブしか挿入しないことがあります: |
||
− | {{hc|.gtkrc-2.0| |
||
− | ... |
||
− | include "/usr/share/themes/SomeTheme/gtk-2.0/gtkrc" |
||
− | ... |
||
− | }} |
||
− | |||
− | これでは QGtkStyle の全てのバージョンで認識されません。この問題は {{ic|~/.gtkrc-2.0}} ファイルに上の例のように {{ic|gtk-theme-name}} を手動で挿入することで解決できます。 |
||
− | |||
− | {{Note|スタイルを変更するアプリケーションは、テーマを変更したときに {{ic|~/.gtkrc-2.0}} ファイルを書き換えます。}} |
||
− | |||
− | 以上の手順が上手く行かないときは、{{AUR|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 |
||
− | |||
− | 上のコマンドはアイコンテーマを {{ic|/usr/share/icons/Faenza-Dark}} にある Faenza-Dark に設定します。カーソルテーマを設定するには最初に gconf の値を設定してください。 |
||
− | |||
− | gconftool-2 --set --type string /desktop/gnome/peripherals/mouse/cursor_theme Adwaita |
||
− | |||
− | それから以下の内容で {{ic|/usr/share/icons/default/index.theme}} ファイルを作成してください: |
||
− | |||
− | [Icon Theme] |
||
− | Inherits=Adwaita |
||
=== GTK+ アプリでテーマが使えない === |
=== GTK+ アプリでテーマが使えない === |
2022年2月16日 (水) 11:23時点における版
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-stylepluginsAUR をインストールし、次の環境変数を設定することで有効にできます:
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
と設定すると有効になります。
Kvantum
Kvantum kvantum-qt5 は SVG ベースの Qt5 テーマです。Adapta, Arc, Ambiance, Materia GTK テーマと同様の Qt テーマが含まれています。
Qt と GTK+ 両方のためのスタイル
統合のために、Qt と 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
を使います。
ヒントとテクニック
Qt アプリで GTK+ のアイコンテーマを使う
If you are running Plasma, run kde-gtk-config and select the icon-theme under System Settings > Application Style > GTK.
If you are using GNOME, run dconf-editor and change the icon-theme
key under org > gnome > desktop > interface to your preferred icon theme.
If you are not using a Desktop environment, for example if you are running a minimal system with i3-wm, install dconf-editor and set the icon-theme as explained above.
You might also have to set the value of DESKTOP_SESSION
in your profile. See Environment variables#Defining variables for the possible ways to obtain the desired result.
Add Title bar and frame to GTK3 applications under KDE Plasma
To have Gnome/GTK applications display with a KDE/Plasma title bar and frame, install gtk3-nocsd-gitAUR and restart your window manager to load the updated library path.
You can also run Gtk application with the wrapper:
$ gtk3-nocsd gedit
Improve subpixel rendering of GTK apps under KDE Plasma
See Font configuration#LCD filter.
Consistent file dialog
In order to have the same file dialog, one can use XDG Portals.
Install xdg-desktop-portal and xdg-desktop-portal-kde and set GTK_USE_PORTAL=1
environment variable in /etc/environment.
Note that currently not all gtk applications support kde file dialogs correctly. For example, Thunderbird supports it normally.
Applications using electron should use at least electron 14 (see #19159) and properly implement this function.
vscode has a pull request for fixing a problem, see #126113.
Meld application from official repository version 3.20.3-1 still opens gtk file picker; version 3.21.1 from meld-gitAUR opens kde file picker, but fails to open directories, see bug report for more info.
GIMP has not implemented use of the portal yet, see bug report.
トラブルシューティング
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