「Qt と GTK アプリケーションの外観の統合」の版間の差分
imported>Alad (→aMSN で GTK+ や KDE のダイアログを使う: rm section referring deprecated application) |
細 (1版 をインポートしました) |
(相違点なし)
|
2015年1月7日 (水) 11:27時点における版
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 でインストールが可能です。
自動設定
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 アイコンテーマの他のバージョンは AUR の oxygen-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-config
が System Settings > Application Appearance > GTK に出来ます。
- LXAppearance — LXDE プロジェクトによる、デスクトップとは独立した GTK+2 や GTK+3 のスタイル設定ツール (LXDE デスクトップの他のパーツを必要としません)。
- 手動で設定する方法は 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-kde4
が System Settings > Lost and Found > GTK style に出来ます。
- GTK+ Change Theme — GTK+ 2.0 テーマを変更できる小さなプログラム (switch2 の代替)。
- GTK+ Preference Tool — GTK+ のテーマセレクター・フォントスイッチャー。
- GTK+ Theme Switch — シンプルな GTK+ テーマスイッチャー。
- 手動設定は GTK+ のページを見て下さい。
GTK+1 スタイル
GTK1 のスタイルを変更するために AUR から gtk-theme-switchAUR パッケージをインストールできます。
テーマエンジン
テーマエンジンは複数のツールキット間でテーマ (アイコンは除く) を翻訳する薄いレイヤー API として考えることができます。これらのエンジンはプロセスに余分なコードを追加するため、この種の解決方法がネイティブのスタイルを使うのと比べ最適なのかどうかは議論の余地があります。
GTK+-Qt エンジン
KDE で動作する GTK+ アプリケーションによって使用されます、基本的には他のデスクトップ環境では動作しません。全ての Qt 設定 (スタイル・フォント、アイコンは除く) を GTK+ アプリケーションに適用しスタイルプラグインを直接使用します。このエンジンは AUR から gtk-qt-engineAUR パッケージでインストールできます。
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+ ...
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 %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+ のアイコンテーマを使う
GNOME を使っていない場合は、gconf-editor
を実行して desktop > gnome > interface から icon_theme
キーを設定にあわせて変更してください。GNOME を使っていないなら ~/.xinitrc
で export 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 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" ...
それから特定のアプリケーションを使うか手動で ~/.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
です。
新しいバージョンの 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
になります。