Qt と GTK アプリケーションの外観の統合

提供: ArchWiki
2014年12月27日 (土) 04:31時点におけるimported>Aladによる版 (→‎aMSN で GTK+ や KDE のダイアログを使う: rm section referring deprecated application)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

関連記事

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

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

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

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

  • 下で説明しているツールを使って GTK+ と Qt のスタイルを別個に修正し、同じような見た目のテーマ (スタイル・カラー・アイコン・カーソル・フォント) を選択する。
  • 特殊なテーマエンジンを使って、他のグラフィカルツールキットの見た目をメインのツールキットに合うように仲介させる:
    • KDE 4 デスクトップ環境を使っている場合、GTK-Qt エンジンが利用可能です。GTK+ の設定ファイルが自動的に更新され GTK+ の外観が Qt に類するようになります。
    • 同じく Trinity デスクトップ環境を使っている場合、GTK-Qt と GTK3-Qt エンジンが利用可能です。
    • 他のデスクトップ環境を使っている場合、(Qt で作られた) QGtkStyle エンジンを選ぶことができます。Qt アプリに強制的に GTK+ 2.x テーマを使わせます。

GTK+ 3.x ツールキットも使っているときは、GTK+ 3.x の wiki 記事にある GTK3 を GTK+ 2.x テーマのように見せる方法を調べて下さい。

ノート: ローカルテーマの変更は通常 root で実行されるアプリケーションには適用されません。GTK+#設定プログラム を参照。

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

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

KDE4 Oxygen

Oxygen は KDE4 にデフォルトで入っている Qt のスタイルです。以下で説明しているように外観を似させる方法が様々に存在します。

oxygen-gtk

oxygen-gtk は Oxygen の開発者による Oxygen Qt スタイルの GTK+ ポートです。他とは異なり、ネイティブの GTK+ スタイルなので Qt には依存しておらず (Qt から GTK+ に変換するエンジンを使っています) ハードコードされたピクセルマップを使ってウィジェットの外観をレンダリングしません。このスタイルは KDE で動作している GTK+ 2.x/3.x と Qt ベースのアプリケーションで外観を統一することを主たる目的としており、他のデスクトップ環境でも上手く動くスタンドアロンの、見た目が良い GTK+ テーマを作ることを第二の目的としています。

oxygen-gtk は GTK+ 2.x と GTK+ 3.x で別れており、公式リポジトリから oxygen-gtk2 もしくは oxygen-gtk3インストールが可能です。

ノート: Before KDE 4.10, you needed to create the file ~/.kde4/share/config/gtkrc-2.0, or let it automatically create like described below. But that is actually counter-productive with KDE 4.10’s oxygen-gtk, and you should delete this file after upgrading to prevent it from messing with your colors. Cleanup-removal of ~/.kde4/share/config/gtkrc might be necessary, too.
自動設定

GTK+ テーマを変更することができる専用のアプリケーションが公式リポジトリからインストールできます。

kde-gtk-config をインストールしても良いでしょう。インストールした後、システム設定 > アプリケーションの外観 > GTK の設定 から設定できます。これを使うことで GTK+ 2.x と GTK+ 3.x 両方のアプリケーションのルックアンドフィールを設定でき、KDE のアドオンインストーラ (Get Hot New Stuff) と統合され、他の GTK+ テーマをダウンロード・インストールすることもできます。

手動設定

GTK+ のテーマを手動で oxygen-gtk に変更するには、以下の内容でファイル ~/.kde4/share/config/gtkrc-2.0 を作成する必要があります:

~/.kde4/share/config/gtkrc-2.0
 include "/usr/share/themes/oxygen-gtk/gtk-2.0/gtkrc"

 style "user"
 { 
    fg[NORMAL] = "#1b1918"
    bg[NORMAL] = "#d5d1cf"
    text[NORMAL] = "#181615"
    base[NORMAL] = "#ffffff"
    fg[ACTIVE] = "#1b1918"
    bg[ACTIVE] = "#d5d1cf"
    text[ACTIVE] = "#181615"
    base[ACTIVE] = "#ffffff"
    fg[PRELIGHT] = "#1b1918"
    bg[PRELIGHT] = "#d5d1cf"
    text[PRELIGHT] = "#ffffff"
    base[PRELIGHT] = "#43ace8"
    fg[SELECTED] = "#1b1918"
    bg[SELECTED] = "#d5d1cf"
    text[SELECTED] = "#ffffff"
    base[SELECTED] = "#43ace8"
    fg[INSENSITIVE] = "#8d8a88"
    bg[INSENSITIVE] = "#ccc7c5"
    text[INSENSITIVE] = "#a6a5a5"
    base[INSENSITIVE] = "#f4f4f4"
    GtkTreeView::odd_row_color="#ffffff"
    GtkTreeView::even_row_color="#f8f7f6"
 }

 widget_class "*" style "user"

 style "tooltips"
 { 
    bg[NORMAL] = "#bedfff"
    fg[NORMAL] = "#252321"
 }

 widget "gtk-tooltips" style "tooltips"
 #gtk-theme-name="qt4"
 gtk-font-name="Sans Serif 9"
 gtk-icon-theme-name="gk4ico"
 gtk-icon-sizes = "panel-menu=16,16:panel=16,16:gtk-button=22,22:gtk-large-toolbar=22,22"

そしてシンボリックリンク ~/.kde4/share/config/gtkrc を作成してください:

$ ln -s ~/.kde4/share/config/gtkrc-2.0 ~/.kde4/share/config/gtkrc

Oxygen アイコン

Oxygen アイコンを使っていて、GTK+ のダイアログでも同じような見た目にしたい場合、AUR から oxygenrefit2-icon-themeAUR して GTK+ のアイコンテーマに設定することが可能です。このテーマを適用するには lxappearance (または類似のプログラム) を使うか、次の行を ~/.kde4/share/config/gtkrc-2.0 に追加して手動で設定してください:

gtk-icon-theme-name="OxygenRefit2"

GTK+ アプリケーションのための Oxygen アイコンテーマの他のバージョンは AURoxygen-gtk-iconsAUR パッケージでインストールできます。

QtCurve

QtCurve は高い人気を誇り設定が可能な GTK+ 2.x, Qt4, Qt5, KDE4 のためのウィジェットスタイルのセットです。QtCurve は公式リポジトリから利用できる qtcurve グループのパッケージでインストールできます。ボタンの外観からスライダーの形まで、様々なオプションの多数のコントロールが存在します。

GTK+ テーマを手動で QtCurve に変更するには、以下の内容でファイル ~/.gtkrc-2.0-kde4 を作成する必要があります:

include "/usr/share/themes/QtCurve/gtk-2.0/gtkrc"
include "/etc/gtk-2.0/gtkrc"

style "user-font"
{
    font_name="Sans Serif"
}
widget_class "*" style "user-font" 
gtk-theme-name="QtCurve"

それからシンボリックリンク ~/.gtkrc-2.0 を作成してください:

ln -s .gtkrc-2.0-kde4 .gtkrc-2.0

フォントも指定したい場合は、ファイルに次の行を追加(編集)してください:

gtk-font-name="Sans Serif 9"

その他

類似のスタイルセットは互いに見た目が似ています - Qt と GTK+ の両方で提供されています - ただし開発者は異なっている可能性があります。同じ見た目にするために細かい修正が必要な場合も存在します (例: Qt4/KDE4 の kdestyle-klearlookAUR と Clearlooks GTK+ テーマ)。

それぞれのツールキットのスタイルを変更する

以下の方法を使うことでそれぞれの環境で使用されるテーマを変更することができます。

Qt5 スタイル

Qt5 は使われているデスクトップ環境に基づいて使用するスタイルを決定します。デスクトップ環境を認識できないときは、通常のスタイルが使用されます。特定のスタイルを強制するには、QT_STYLE_OVERRIDE 環境変数を設定してください。つまり、gtk テーマを使用したい場合は gtk に設定してください。Qt5 アプリケーションは -style フラグもサポートしており、特定のスタイルを使って Qt5 アプリケーションを起動することが可能です。

Qt4 スタイル

Qt4 のスタイルも同様に変更できます:

  • KDE4 システム設定 (systemsettings) を使う。設定は Common Appearance and Behavior > Application Appearance > Style > Widget Style にあります。
  • コマンドラインツールを使う $ kwriteconfig --file kdeglobals --group General --key widgetStyle [name of style]
  • Qt 設定 (qtconfig-qt4) アプリケーションを使う。設定は Appearance > Select GUI Style にあります。

Qt 設定では Qt アプリのテーマやフォントなどを選ぶことができますが、KDE4 システム設定ではさらに多くの設定を変更することが可能です (例: フォントアンチエイリアス、ヒンティングなど)。また、フォント設定の記事に書いてあるようにすれば ~/.config/fontconfig/fonts.conf でアンチエイリアスやヒンティングを手動で設定できます。

Qt3 スタイル

Qt3 のスタイルは以下の方法で変更できます:

  • KDE3 コントロールセンター (kcontrol) を使う。設定は Appearance & Themes > Style > Widget Style にあります。
  • コマンドラインツールを使う kde-config --style [name of style]
  • デフォルトの Qt 設定 (qt3config) アプリケーションを使う。設定は Appearance > Select GUI Style にあります。

GTK+3 スタイル

GTK+ 3.x のスタイルを変更するアプリケーションが存在します:

  • kde-gtk-config — GTK+2 や Gtk+3 アプリケーションのスタイルとフォントを変更できるアプリケーション。
https://projects.kde.org/kde-gtk-config || kde-gtk-config
インストールした後、kde-gtk-configSystem Settings > Application Appearance > GTK に出来ます。
  • LXAppearance — LXDE プロジェクトによる、デスクトップとは独立した GTK+2 や GTK+3 のスタイル設定ツール (LXDE デスクトップの他のパーツを必要としません)。
http://wiki.lxde.org/en/LXAppearance || lxappearance
  • 手動で設定する方法は GTK+ のページを見て下さい。

GTK+2 スタイル

GTK+ 2.x のスタイルを変更するアプリケーションは多数存在します: (詳しくは上の GTK+3 セクションを見て下さい。)

  • gtk-kde4 — KDE4 での GTK+2 アプリケーションのスタイルとフォントを変更できるアプリケーション。
http://kde-look.org/content/show.php?content=74689 || gtk-kde4AUR
インストールした後、gtk-kde4System Settings > Lost and Found > GTK style に出来ます。
  • GTK+ Change Theme — GTK+ 2.0 テーマを変更できる小さなプログラム (switch2 の代替)。
http://plasmasturm.org/code/gtk-chtheme/ || gtk-chtheme
  • GTK+ Preference Tool — GTK+ のテーマセレクター・フォントスイッチャー。
http://gtk-win.sourceforge.net/home/index.php/Main/GTKPreferenceTool || gtk2_prefs
  • GTK+ Theme Switch — シンプルな GTK+ テーマスイッチャー。
http://muhri.net/nav.php3?node=gts || gtk-theme-switch2
  • 手動設定は GTK+ のページを見て下さい。

GTK+1 スタイル

GTK1 のスタイルを変更するために AUR から gtk-theme-switchAUR パッケージをインストールできます。

テーマエンジン

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

GTK+-Qt エンジン

KDE で動作する GTK+ アプリケーションによって使用されます、基本的には他のデスクトップ環境では動作しません。全ての Qt 設定 (スタイル・フォント、アイコンは除く) を GTK+ アプリケーションに適用しスタイルプラグインを直接使用します。このエンジンは AUR から gtk-qt-engineAUR パッケージでインストールできます。

ノート: Qt スタイルによってはレンダリングに問題が生じます。

KDE System SettingsLost and Found > GTK Styles and Fonts からこのエンジンにアクセス可能です。

エンジンを完全に削除したいときはエンジンをアンインストールするだけでなく以下のファイルも削除してください:

$ rm ~/.gtkrc2.0-kde
$ rm ~/.kde4/env/gtk-qt-engine.rc.sh
$ rm ~/gtk-qt-engine.rc

QGtkStyle

これは GTK+ を使って全てのコンポーネントをレンダリングすることでアプリケーションを GNOME デスクトップ環境に完全に調和させる Qt スタイルです。このスタイルを使うには最低でも GTK+ 2.0 と Qt 4.3 が必要ですが、できれば Qt 4.4 以上が推奨です。このスタイルを有効にするには:

  • Qt Configuration: Appearance > GUI Style で "GTK+" を選択してください。
  • KDE4 System Settings: Application Appearance > Style > Applications で "GTK+ Style" を選択してください。
  • コマンドライン: ~/.config/Trolltech.conf ファイルを編集して以下を加えて下さい:
~/.config/Trolltech.conf
...
[Qt]
style=GTK+
...
ノート: Beginning with version 4.5 this style is included in Qt and does not require a separate package anymore.

Tips and tricks

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+ のアイコンテーマを使う

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

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>

トラブルシューティング

gtk-qt-engine が OpenOffice で動かない

OpenOffice に GTK+-Qt エンジンで選択した Qt テーマを使わせるには次の行を /etc/profile に (root で) 追加する必要があります:

export SAL_GTK_USE_PIXMAPPAINT=1

また、KDE4 System SettingsLost and Found > GTK Styles and Fonts で "Use my KDE style in GTK applications" を選択してください。

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 を起動して GTK+ スタイルを選択するとエラーが表示されることがあります:

QGtkStyle was unable to detect the current GTK+ theme.

このスレッドによれば、この問題を解決するには libgnomeui をインストールする必要があります。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 を手動で挿入することで解決できます。

ノート: Style-changing applications will most probably rewrite the ~/.gtkrc-2.0 file the next time you change themes.

以上の手順が上手く行かないときは、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 です。

新しいバージョンの gtk-qt-engineAUR~/.gtkrc2.0-kde を使って ~/.kde/env/gtk-qt-engine.rc.sh で export する変数を設定しています。最近 gtk-qt-engine を削除していて GTK+ テーマを設定しようとしているのであれば ~/.kde/env/gtk-qt-engine.rc.sh も削除して再起動して下さい。これによって GTK+ の外観の設定が ~/.gtkrc2.0-kde ファイルではなく標準的な ~/.gtkrc2.0 になります。