# Uniform Look for Qt and GTK Applications (日本語)

関連記事

- GTK+
- Qt

Qt と GTK+ ベースのプログラムは異なるウィジェットツールキットを使ってグラフィカルユーザーインターフェースを表示しています。それぞれにデフォルトで異なるテーマ・スタイル・アイコンセットが存在するため、"ルックアンドフィール"は著しく乖離してしまいます。この記事ではデスクトップエクスペリエンスを統合するために 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 テーマのように見せる方法を調べて下さい。

## 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 でインストールが可能です。

Note: 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-theme して GTK+ のアイコンテーマに設定することが可能です。このテーマを適用するには `lxappearance` (または類似のプログラム) を使うか、次の行を `~/.kde4/share/config/gtkrc-2.0` に追加して手動で設定してください:

    gtk-icon-theme-name="OxygenRefit2"

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

### 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-klearlook と 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 システム設定ではさらに多くの設定を変更することが可能です (例: フォントアンチエイリアス、ヒンティングなど)。

### 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-config` が System Settings > Application Appearance > GTK に出来ます。

- LXAppearance — LXDE プロジェクトによる、デスクトップとは独立した GTK+2 や GTK+3 のスタイル設定ツール (LXDE デスクトップの他のパーツを必要としません)。

  http://wiki.lxde.org/en/LXAppearance || lxappearance

### GTK+2 スタイル

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

- gtk-kde4 — KDE4 での GTK+2 アプリケーションのスタイルとフォントを変更できるアプリケーション。

  http://kde-look.org/content/show.php?content=74689 || gtk-kde4
  インストールした後、`gtk-kde4` が System 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-switch パッケージをインストールできます。

## テーマエンジン

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

### GTK+-Qt エンジン

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

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

KDE System Settings の Lost 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+
    ...

Note: 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 から kgtk をインストールできます。インストールした後、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` に置き換えて下さい。

Note: GTK+ アプリケーションには KGtk ラッパーと互換性がないものがあります (例: Chromium)。場合によってはラッパーによってアプリケーションがクラッシュします (例: Firefox)。さらに KDM など他のアプリケーションに影響を与えることもあります (Thunderbird などと一緒に使っている場合)。

### aMSN で GTK+ や KDE のダイアログを使う

aMSN はユーザーインターフェースに Tk ツールキットを使っています。GTK+ や KDE のダイアログを使わせるには AUR の amsn-plugins-desktopintegration プラグインをインストールしてください。他のプラグインは aMSN のプラグインページ で見つけることができます。

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

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

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

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

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

If you are not using GNOME, run `gconf-editor`, look under desktop > gnome > interface for the `icon_theme` key and change it to your preference. As you're not using GNOME it's possible that you will have to set `export DESKTOP_SESSION=gnome` somewhere in your `~/.xinitrc`.

### 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 Settings の Lost 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"
    ...

Note:

- この行を追加するのはウィンドウマネージャを起動する行の前にしてください。
- コロンで分割して複数のパスを追加することも可能です。
- `~` ではなく `$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` を手動で挿入することで解決できます。

Note: 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+ アプリでテーマが使えない

If the style or theme engine you set up is not showing in your GTK applications then it's likely your GTK+ settings files are not being loaded for some reason. You can check where your system expects to find these files by doing the following..

    $ export | grep gtk

Usually the expected files should be `~/.gtkrc` for GTK1 and `~/.gtkrc2.0` or `~/.gtkrc2.0-kde` for GTK+ 2.x.

Newer versions of gtk-qt-engine use `~/.gtkrc2.0-kde` and set the export variable in `~/.kde/env/gtk-qt-engine.rc.sh`. If you recently removed gtk-qt-engine and are trying to set a GTK+ theme then you must also remove `~/.kde/env/gtk-qt-engine.rc.sh` and reboot. Doing this will ensure that GTK+ looks for it's settings in the standard `~/.gtkrc2.0` instead of the `~/.gtkrc2.0-kde` file.

Categories:

- Widget Toolkits (日本語)
- Eye candy (日本語)