「Qt」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(1版 をインポートしました)
(Pkg/AUR テンプレートの更新)
(3人の利用者による、間の18版が非表示)
1行目: 1行目:
 
[[Category:ウィジェットツールキット]]
 
[[Category:ウィジェットツールキット]]
 
[[en:Qt]]
 
[[en:Qt]]
[[es:Qt]]
 
 
[[ru:Qt]]
 
[[ru:Qt]]
[[zh-CN:Qt]]
+
[[zh-hans:Qt]]
 
{{Related articles start}}
 
{{Related articles start}}
{{Related2|KDE|KDE}}
+
{{Related|KDE}}
{{Related2|Uniform Look for Qt and GTK Applications|Qt と GTK アプリケーションの外観の統}}
+
{{Related|Qt と GTK アプリケーションの外観の統}}
{{Related2|GTK+|GTK+}}
+
{{Related|GTK+}}
 
{{Related articles end}}
 
{{Related articles end}}
[http://qt-project.org/ Qt] はクロスプラットフォームのアプリケーション・ウィジェットツールキットです。標準の C++ を使っていますが言語機能を強化するために特別なコードジェネレータ ([http://qt-project.org/doc/qt-4.8/moc.html Meta Object Compiler] もしくは moc) とマクロをフルに活用しています。主な特徴として:
+
[https://www.qt.io/ Qt] はクロスプラットフォームのアプリケーション・ウィジェットツールキットです。標準の C++ を使っていますが言語機能を強化するために特別なコードジェネレータ ([https://doc.qt.io/qt-5.12/moc.html Meta Object Compiler] もしくは moc) とマクロをフルに活用しています。主な特徴として:
 
* 主要なデスクトッププラットフォームと複数のモバイルプラットフォームで動作します。
 
* 主要なデスクトッププラットフォームと複数のモバイルプラットフォームで動作します。
 
* 完全な国際化サポート。
 
* 完全な国際化サポート。
 
* SQL データベースのアクセス、XML のパース、スレッド管理、ネットワークのサポートを提供するライブラリと、ファイルを処理するための統一されたクロスプラットフォームのアプリケーションプログラミングインタフェース (API)。
 
* SQL データベースのアクセス、XML のパース、スレッド管理、ネットワークのサポートを提供するライブラリと、ファイルを処理するための統一されたクロスプラットフォームのアプリケーションプログラミングインタフェース (API)。
   
Qt フレームワークは主要な開発プラットフォームの一つとして、[[KDE|KDE]] ソフトウェアコミュニティや [[VLC media player|VLC]], [[VirtualBox|VirtualBox]], [[Opera|Opera]], [[Mathematica]], [[Skype|Skype]] などオープンソース・プロプライエタリ問わず様々なアプリケーションで使われています。
+
Qt フレームワークは主要な開発プラットフォームの一つとして、[[KDE]] ソフトウェアコミュニティや [[VLC media player|VLC]], [[VirtualBox]], [[Opera]], [[Mathematica]], [[Skype]] などオープンソース・プロプライエタリ問わず様々なアプリケーションで使われています。
   
 
== インストール ==
 
== インストール ==
現在[[official Repositories|公式リポジトリ]]では3つのバージョンの Qt が利用可能です。以下のパッケージで[[Pacman|インストール]]できます:
+
現在[[公式リポジトリ]]では2つのバージョンの Qt が利用可能です。以下のパッケージで[[Pacman|インストール]]できます:
 
* '''Qt 5.x''' は {{Pkg|qt5-base}} パッケージでインストールできます。ドキュメントは {{Pkg|qt5-doc}} パッケージに入っています。
 
* '''Qt 5.x''' は {{Pkg|qt5-base}} パッケージでインストールできます。ドキュメントは {{Pkg|qt5-doc}} パッケージに入っています。
* '''Qt 4.x''' は {{Pkg|qt4}} パッケージでインストールできます。ドキュメントは {{AUR|qt4-doc}} パッケージに入っています。
+
* '''Qt 4.x''' は {{AUR|qt4}} パッケージでインストールできます。ドキュメントは {{AUR|qt4-doc}} パッケージに入っています。
 
* '''Qt 3.x''' は {{AUR|qt3}} パッケージでインストールできます。ドキュメントは {{AUR|qt3-doc}} パッケージに入っています。
 
* '''Qt 3.x''' は {{AUR|qt3}} パッケージでインストールできます。ドキュメントは {{AUR|qt3-doc}} パッケージに入っています。
 
{{Warning|Qt のパッケージは /usr/bin にバイナリ (例: qmake) を提供しません。代わりに -qt5, -qt4, -qt3 のシンボリックリンクが提供されます (例: qmake-qt5, qmake-qt4, qmake-qt3)。このため Qt3/4 のアプリケーションではコンパイルが失敗するかもしれません。在来のバイナリをインストールするには、次のセクションの ''qtchooser'' を見て下さい。}}
 
   
 
== デフォルトの Qt ツールキット ==
 
== デフォルトの Qt ツールキット ==
  +
{{Pkg|qtchooser}} をインストールすることで /usr/bin に在来のバイナリ (例: qmake) を復活させて使用する Qt ツールキットを設定できます。デフォルトでは Qt5 が使われます。
 
  +
Qt のパッケージ {{Pkg|qt5-base}} は {{ic|/usr/bin}} にバイナリ (例: ''qmake'') および {{ic|-qt5}} のシンボリックリンクを提供します。Qt 4 以前がインストールされていない場合、特別な設定は必要ありません。
  +
  +
Qt 4 以前では、{{ic|/usr/bin/qmake}} などがインストールされず、{{ic|-qt4}}, {{ic|-qt3}} のシンボリックリンクが提供されます (例: {{ic|qmake-qt4}}, {{ic|qmake-qt3}})。このため Qt3/4 のアプリケーションではコンパイルが失敗するかもしれません。
  +
  +
{{AUR|qtchooser}} をインストールすることで {{ic|/usr/bin}} に在来のバイナリ (例: ''qmake'') を復活させて使用する Qt ツールキットを設定できます。デフォルトでは Qt5 が使われます。
  +
  +
{{Warning|{{AUR|qtchooser}} は {{Pkg|qt5-base}} と衝突します。本当に必要な場合は {{ic|/usr/local}} にインストールすることができますが、公式にはサポートされていません [https://bugs.archlinux.org/task/51308]。}}
   
 
=== 環境変数を使う ===
 
=== 環境変数を使う ===
例えば、Qt4 に設定するには {{ic|~/.{bash,zsh}_profile}} で {{ic|QT_SELECT=4}} を export してください。
+
デフォルトの Qt ツールキットを定義するには、{{ic|QT_SELECT}} [[環境変数]]を作成します。例えば、Qt4 に設定するには、シェルの初期化ファイル ({{ic|~/.bash_profile}} や {{ic|~/.zprofile}} など) で {{ic|1=export QT_SELECT=4}} を実行してください。
   
 
=== 設定ファイルを使う ===
 
=== 設定ファイルを使う ===
例えば、Qt4 に設定するには {{ic|/etc/xdg/qtchooser/4.conf}} から {{ic|~/.config/qtchooser/default.conf}} にシンボリックリンクを張って下さい。
+
{{ic|/etc/xdg/qtchooser/}} ディレクトリの ''.conf'' ファイルに {{ic|~/.config/qtchooser/default.conf}} からシンボリックリンクを張ればデフォルトの Qt ツールキットを設定できます。例えば、Qt4 に設定するには {{ic|/etc/xdg/qtchooser/4.conf}} から {{ic|~/.config/qtchooser/default.conf}} にリンクするシンボリックリンクを作成します:
  +
$ ln -s {{ic|/etc/xdg/qtchooser/4.conf}} {{ic|~/.config/qtchooser/default.conf}}
   
 
== 外観 ==
 
== 外観 ==
=== 設定 ===
+
=== Qt4 ===
Qt のアプリケーションは動作しているデスクトップ環境の挙動を模倣しようとします、ただし、なにか問題が発生したり、設定がハードコードされている場合は別です。Qt アプリケーションのルックアンドフィールを変更したい場合は、''Qt 設定'' ({{ic|qtconfig-qt4}} もしくは {{ic|qt3config}}) ツールが使えます。''QtConfig'' を使うことで Qt アプリケーションの外観をとてもシンプルに設定することができ、現在の Qt のスタイル・色・フォントなど高度なオプションまで簡単にアクセスすることが可能です。Qt5 では ''QtConfig'' は削除されました。Qt5 で特定のスタイルを使うようにしたいときは、{{ic|QT_STYLE_OVERRIDE}} 環境変数を使いたいスタイルに設定してください (例: {{ic|gtk}})
+
Qt4 のアプリケーションは動作しているデスクトップ環境の挙動を模倣しようとします、ただし、なにか問題が発生したり、設定がハードコードされている場合は別です。
  +
* KDE Plasma では、KDE で選択された Qt スタイルが使われます。''KDE システム設定'' (''systemsettings5'') を使って設定することができます。設定項目は ''Appearance > Application Style > Widget Style'' にあります。
 
Qt の中に含まていせんが、''KDE システム設定''も Qt アプリケーションの多くカスタマイズオプションを設定することができます
+
* Cinnamon, GNOME, Xfce GTK+ が使われま ([[Qt と GTK アプリケーションの外観統合#QGtkStyle|QGtkStyle]])
  +
* 他のデスクトップ環境では、Windows が使われます。
 
==== テーマ ====
 
GTK+ スタイル、Windows スタイル、CDE スタイルなど Qt には始めから複数のスタイルが含まれていますが、公式リポジトリや [[Arch User Repository|AUR]] からさらに多くのスタイルをインストールできます (ほとんどは KDE デスクトップ用のテーマです):
 
* {{App|[[Wikipedia:ja:Oxygen Project|Oxygen]]|KDE デスクトップのデスクトップテーマ。|http://www.oxygen-icons.org/|{{Pkg|kdebase-runtime}}}}
 
* {{App|QtCurve|GTK+ と Qt アプリケーションをサポートしている人気のデスクトップテーマ、細かい設定が可能。|http://kde-look.org/content/show.php?content=40492|{{Grp|qtcurve}}}}
 
* {{App|Skulpture|KDE と Qt プログラムの GUI スタイルアドオン。ビジュアルエクスペリエンスを向上させる影とグラデーションによるクラシカルで立体的なアートワークが特徴。|http://kde-look.org/content/show.php/?content=59031|{{AUR|skulpture}}}}
 
* {{App|Polymer|KDE Plastik Style の Qt3 移植。|http://kde-look.org/content/show.php?content=21748|{{AUR|polymer}}}}
 
* {{App|Bespin|細かくカスタマイズできる KDE テーマ。|http://cloudcity.sourceforge.net/frame.php|{{AUR|bespin-svn}}}}
 
   
  +
Qt4 アプリケーションのルックアンドフィールを変更したい場合は、({{AUR|qt4}} パッケージに含まれている) ''Qt 設定'' ({{ic|qtconfig-qt4}}) ツールが使えます。''QtConfig'' を使うことで Qt4 アプリケーションの外観をとてもシンプルに設定することができ、現在の Qt のスタイル・色・フォントなど高度なオプションまで簡単にアクセスすることが可能です。
==== フォント ====
 
Qt のフォントは ''QtConfig'' から ''フォント > デフォルトのフォント'' で設定できます。
 
   
  +
{{Note|''GTK+'' スタイルを使う場合、色やフォントの設定は無視され、GTK+ 2 から継承されます。}}
==== アイコン ====
 
''QtConfig'' からアイコンテーマを設定する方法はありませんが、Qt は [http://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html Freedesktop.org Icon Specification] に従っているので、X 用に設定したテーマセットは Qt でも使われます。
 
   
  +
Qt は設定情報を全て {{ic|/etc/xdg/Trolltech.conf}} (システム全体) や {{ic|~/.config/Trolltech.conf}} (ユーザー個別) に保存しています。このファイルには外観と関係ない情報が多く含まれているため見づらいですが、変更をファイルの最後に加えれば前の値を上書きできます (変更は {{ic|[Qt]}} ヘッダーの下に追加してください)。
=== 手動設定 ===
 
Qt は設定情報を全て {{ic|~/.config/Trolltech.conf}} に保存しています。このファイルには外観と関係ない情報が多く含まれているため見づらいですが、変更をファイルの最後に加えれば前の値を上書きできます (変更は {{ic|[Qt]}} ヘッダーの下に追加してください)。
 
   
 
例えば、テーマを QtCurve に変更するには、以下を追加します:
 
例えば、テーマを QtCurve に変更するには、以下を追加します:
62行目: 57行目:
 
style=QtCurve
 
style=QtCurve
 
</nowiki>}}
 
</nowiki>}}
  +
  +
Qt4 には次のスタイルが含まれています: ''CDE'', ''Cleanlooks'', ''GTK+'', ''Motif'', ''Plastique'', ''Windows''。他のスタイルは公式リポジトリや [[AUR]] からインストールできます (ほとんどのスタイルは KDE Plasma デスクトップ用に作られています):
  +
* {{App|Breeze|Plasma Desktop 用の Breeze ビジュアルスタイルのアートワーク、スタイル、アセット。|https://cgit.kde.org/breeze.git|{{AUR|breeze-kde4}}}}
  +
* {{App|[[Wikipedia:Oxygen Project|Oxygen]]|KDE Oxygen スタイル。|https://cgit.kde.org/oxygen.git|{{Pkg|oxygen-kde4}}{{Broken package link|{{aur-mirror|oxygen-kde4}}}}}}
  +
* {{App|QtCurve|KDE と GTK のウィジェットスタイルの設定セット。|https://cgit.kde.org/qtcurve.git|{{Pkg|qtcurve-qt4}}{{Broken package link|{{aur-mirror|qtcurve-qt4}}}}}}
  +
* {{App|Adwaita-Qt|Qt アプリケーションを GNOME Shell に調和させるスタイル。|https://github.com/MartinBriza/adwaita-qt|{{AUR|adwaita-qt4}}}}
  +
  +
=== Qt5 ===
  +
Qt5 は使われているデスクトップ環境によって使用するスタイルを決定します:
  +
* KDE Plasma では、KDE Plasma で選択されている Qt テーマが使われます。''KDE 5 System Settings'' (''systemsettings5'') を使うことで設定できます。設定項目は ''Appearance > Application Style > Widget Style'' にあります。
  +
* Cinnamon, GNOME, MATE, LXDE, Xfce では GTK+ が使われます ([[Qt と GTK アプリケーションの外観の統合#QGtkStyle|QGtkStyle]])。
  +
* 他のデスクトップ環境では、Fusion が使われます。
  +
  +
特定のスタイルを使いたい場合、{{ic|QT_STYLE_OVERRIDE}} 環境変数を設定します。特に、[[GTK+]] のテーマを使いたい場合は {{ic|gtk2}} に設定してください (GTK+ のスタイルを使うには Qt スタイルプラグインのインストールが必要です)。Qt5 アプリケーションは {{ic|-style}} フラグもサポートしており、特定のスタイルを使って Qt5 アプリケーションを起動することができます。
  +
  +
Qt5 には次のスタイルが含まれています: ''GTK+'', ''Fusion'', ''Windows''。他のスタイルはパッケージからインストールできます:
  +
* {{App|Breeze|Plasma Desktop 用の Breeze ビジュアルスタイルのアートワーク、スタイル、アセット。|https://cgit.kde.org/breeze.git|{{Pkg|breeze}}}}
  +
* {{App|Oxygen|KDE Oxygen スタイル。|https://cgit.kde.org/oxygen.git|{{Pkg|oxygen}}}}
  +
* {{App|QtCurve|KDE と GTK のウィジェットスタイルの設定セット。|https://cgit.kde.org/qtcurve.git|{{Pkg|qtcurve-qt5}}}}
  +
* {{App|Adwaita-Qt|Qt アプリケーションを GNOME Shell に調和させるスタイル。|https://github.com/MartinBriza/adwaita-qt|{{AUR|adwaita-qt5}}{{Broken package link|パッケージが存在しません}}}}
  +
* {{App|Qt スタイルプラグイン|''GTK+'', ''Cleanlooks'', ''Motif'', ''Plastique'' などの Qt5 の追加スタイルプラグイン。|http://code.qt.io/cgit/qt/qtstyleplugins.git|{{Pkg|qt5-styleplugins}}}}
  +
  +
Qt4 アプリの設定をする {{ic|qtconfig-qt4}} のように、{{pkg|qt5ct}} を使うことで Qt5 アプリのルックアンドフィールをカスタマイズすることができます。
   
 
=== Qt スタイルシート ===
 
=== Qt スタイルシート ===
67行目: 85行目:
   
 
他のスタイルを使ってアプリケーションを実行するには、次のように実行してください:
 
他のスタイルを使ってアプリケーションを実行するには、次のように実行してください:
$ qt_application --stylesheet style.qss
+
$ qt_application -stylesheet ''style.qss''
   
Qt スタイルシートの詳細は [http://qt-project.org/doc/qt-4.8/stylesheet-reference.html 公式ドキュメント] や [http://thesmithfam.org/blog/2009/09/10/qt-stylesheets-tutorial/ チュートリアル] を見て下さい。スタイルシートの例は [http://kde-apps.org/content/show.php/roxydoxy?content&#61;125979 Dolphin modification] を見て下さい。
+
Qt スタイルシートの詳細は [https://doc.qt.io/qt-5/stylesheet-reference.html 公式ドキュメント] や [http://thesmithfam.org/blog/2009/09/10/qt-stylesheets-tutorial/ チュートリアル] を見て下さい。スタイルシートの例は [http://kde-apps.org/content/show.php/roxydoxy?content&#61;125979 Dolphin modification] を見て下さい。
   
 
=== GTK+ と Qt ===
 
=== GTK+ と Qt ===
GTK+ と Qt のアプリケーションを使っているならば、それらの見た目が上手く調和しないことに気づくでしょう。GTK+ スタイルと Qt スタイルを調和させたい場合は [[Uniform Look for Qt and GTK Applications]] を読んで下さい。
+
GTK+ と Qt のアプリケーションを使っているならば、それらの見た目が上手く調和しないことに気づくでしょう。GTK+ スタイルと Qt スタイルを調和させたい場合は [[Qt GTK アプリケーションの外観の統合]]を読んで下さい。
  +
  +
=== KDE 以外の環境で Qt アプリを設定 ===
  +
  +
Qt4 と違って、Qt5 にはフォントやアイコン、スタイルを設定するための qtconfig ユーティリティが含まれていません。代わりに、Qt5 は DE の設定を使用します。KDE や GNOME では問題なく設定が適用されますが、他のマイナーな DE や WM を使っている場合、Qt5 アプリケーションでアイコンが表示されなくなることがあります。環境変数で {{ic|1=XDG_CURRENT_DESKTOP=KDE}} や {{ic|1=XDG_CURRENT_DESKTOP=GNOME}} と設定して使っているデスクトップ環境を偽装し、適切なアプリケーションを使ってアイコンセットを設定することで解決できます。
  +
  +
もしくは、DE に依存しない Qt5 QPA の設定ユーティリティが含まれている {{pkg|qt5ct}} パッケージを使う方法もあります。パッケージをインストールしたら、{{ic|qt5ct}} を実行してアイコンテーマを設定し、{{ic|1=QT_QPA_PLATFORMTHEME="qt5ct"}} 環境変数を設定して下さい。それで Qt アプリケーションに設定が反映されます。もしくは Qt5 アプリケーションの引数として {{ic|--platformtheme qt5ct}} を指定してください。
  +
  +
ユーザーセッションで {{ic|QT_QPA_PLATFORMTHEME}} を自動的に設定するには、以下の行を {{ic|~/.profile}} に追加します:
  +
  +
[ "$XDG_CURRENT_DESKTOP" = "KDE" ] || [ "$XDG_CURRENT_DESKTOP" = "GNOME" ] || export QT_QPA_PLATFORMTHEME="qt5ct"
  +
  +
上記の設定でユーザーセッション全体で {{ic|QT_QPA_PLATFORMTHEME}} 環境変数が使われるようになります。{{ic|~/.profile}} ファイルを使用せずに独自のカスタム環境変数で設定を行う [[Enlightenment]] では上記の設定は機能しません。
  +
  +
以下のエラーが表示された場合、あるいはアプリの中のアイコンが表示されない場合、{{pkg|oxygen}} と {{pkg|oxygen-icons}} をインストールしてください:
  +
  +
Icon theme "oxygen" not found.
  +
Icon theme "oxygen" not found.
  +
Error: standard icon theme "oxygen" not found!
   
 
== 開発 ==
 
== 開発 ==
78行目: 114行目:
 
=== サポートされているプラットフォーム ===
 
=== サポートされているプラットフォーム ===
 
Qt はマイナーなプラットフォームを含めて、今日存在するほとんどのプラットフォームをサポートしており、時々移植が増えることもあります。完全なリストは [[Wikipedia:Qt_(framework)#Platforms|Qt の Wikipedia の記事]]を見て下さい。
 
Qt はマイナーなプラットフォームを含めて、今日存在するほとんどのプラットフォームをサポートしており、時々移植が増えることもあります。完全なリストは [[Wikipedia:Qt_(framework)#Platforms|Qt の Wikipedia の記事]]を見て下さい。
  +
  +
==== Android ====
  +
  +
最初に [[Android|Android SDK]] と NDK が必要です。SDK の {{AUR|android-sdk}} (一部のツールが削除されています) または {{AUR|android-sdk-25.2.5}} と NDK の {{AUR|android-ndk-10e}} をインストールするか、[[Android Studio]] を使用してください。NDK バージョン [https://developer.android.com/ndk/downloads/older_releases.html#ndk-10c-downloads 10e] をインストールすることが強く推奨されています ([https://wiki.qt.io/Qt_for_Android_known_issues 既知の問題] が存在するため)。
  +
  +
それから Android 用の Qt 5 を入手してください。以下の [[AUR]] パッケージでインストールできます (ビルド手順は Qt の [http://wiki.qt.io/Android wiki] ページに載っています):
  +
* {{AUR|android-qt5-arm64-v8a}}{{Broken package link|パッケージが存在しません}} - arm64-v8a [https://developer.android.com/ndk/guides/abis.html ABI]
  +
* {{AUR|android-qt5-armeabi}}{{Broken package link|パッケージが存在しません}} - armeabi
  +
* {{AUR|android-qt5-armeabi-v7a}}{{Broken package link|パッケージが存在しません}} - armeabi-v7a
  +
* {{AUR|android-qt5-mips}}{{Broken package link|パッケージが存在しません}} - mips
  +
* {{AUR|android-qt5-x86}}{{Broken package link|パッケージが存在しません}} - x86
  +
* {{AUR|android-qt5-x86_64}}{{Broken package link|パッケージが存在しません}} - x86_64
  +
もしくは [http://download.qt.io/official_releases/qt/5.9/5.9.2/qt-opensource-linux-x64-5.9.2.run Qt Installer] を使って入手することもできます。
   
 
=== ツール ===
 
=== ツール ===
83行目: 132行目:
 
以下は公式の Qt ツールです:
 
以下は公式の Qt ツールです:
   
* {{App|[[Wikipedia: Qt Creator|Qt Creator]]|Qt のために作られたクロスプラットフォームの IDE で全ての機能をサポート。|http://qt-project.org/doc/qtcreator/|{{Pkg|qtcreator}}}}
+
* {{App|[[Wikipedia:Qt Creator|Qt Creator]]|Qt のために作られたクロスプラットフォームの IDE で全ての機能をサポート。|https://doc.qt.io/qtcreator/|{{Pkg|qtcreator}}}}
* {{App|Qt Linguist|Qt アプリケーションの翻訳や国際化を素早く行うためのツールのセット。|http://qt-project.org/doc/qt-4.8/linguist-manual.html|{{Pkg|qt4}}}}
+
* {{App|Qt Linguist|Qt アプリケーションの翻訳や国際化を素早く行うためのツールのセット。|https://doc.qt.io/qt-5/qtlinguist-index.html|Qt 5: {{Pkg|qt5-tools}}, Qt 4: {{AUR|qt4}}}}
* {{App|Qt Assistant|Qt ''qch'' ファイルの再配布可能で設定可能なドキュメントリーダー。|http://qt-project.org/doc/qt-4.8/assistant-manual.html|{{Pkg|qt4}}}}
+
* {{App|Qt Assistant|Qt ''qch'' ファイルの再配布可能で設定可能なドキュメントリーダー。|https://doc.qt.io/qt-5/qtassistant-index.html|Qt 5: {{Pkg|qt5-tools}}, Qt 4: {{AUR|qt4}}}}
* {{App|Qt Designer|Qt ウィジェットのためのパワフルなクロスプラットフォームの GUI レイアウト・フォームビルダー。|http://qt-project.org/doc/qt-4.8/designer-manual.html|{{Pkg|qt4}}}}
+
* {{App|Qt Designer|Qt ウィジェットのためのパワフルなクロスプラットフォームの GUI レイアウト・フォームビルダー。|https://doc.qt.io/qt-5/qtdesigner-manual.html|Qt 5: {{Pkg|qt5-tools}}, Qt 4: {{AUR|qt4}}}}
* {{App|Qt Quick Designer|QML ファイルのビジュアルエディタ、WYSIWYG をサポート。Qt Quick アプリケーションを素早くデザインしてスクラッチからコンポーネントを作ることができます。|http://qt-project.org/doc/qtcreator-2.8/creator-using-qt-quick-designer.html|{{Pkg|qtcreator}}}}
+
* {{App|Qt Quick Designer|QML ファイルのビジュアルエディタ、WYSIWYG をサポート。Qt Quick アプリケーションを素早くデザインしてスクラッチからコンポーネントを作ることができます。|https://doc.qt.io/qtcreator/creator-using-qt-quick-designer.html|{{Pkg|qtcreator}}}}
* {{App|QML Viewer|QML ドキュメントを読み込むためのツール。QML アプリケーションの開発やデバッグを容易にします。|http://qt-project.org/doc/qt-4.8/qmlviewer.html|{{Pkg|qt4}}}}
+
* {{App|qmlscene|QML ドキュメントを読み込むためのツール。QML アプリケーションの開発やデバッグを容易にします。|https://doc.qt.io/qt-5/qtquick-qmlscene.html|Qt 5: {{Pkg|qt5-declarative}}, Qt 4 QML Viewer: {{AUR|qt4}}}}
* {{App|[[Wikipedia:Qmake|qmake]]|様々なプラットフォームをまたがった開発プロジェクトのビルドプロセスを簡素化するのを助けるツール。[[Wikipedia:ja:CMake|cmake]] に似ていますが、オプションは少なめで Qt アプリケーションのために作られています。|https://qt-project.org/doc/qt-4.8/qmake-manual.html|{{Pkg|qt4}}}}
+
* {{App|[[Wikipedia:Qmake|qmake]]|様々なプラットフォームをまたがった開発プロジェクトのビルドプロセスを簡素化するのを助けるツール。[[Wikipedia:ja:CMake|cmake]] に似ていますが、オプションは少なめで Qt アプリケーションのために作られています。|https://doc.qt.io/qt-5/qmake-manual.html|Qt 5: {{Pkg|qt5-base}}, Qt 4: {{AUR|qt4}}}}
* {{App|uic|''*.ui'' XML ファイルを読み込み対応する C++ ファイルを生成するツール。|http://qt-project.org/doc/qt-4.8/uic.html|{{Pkg|qt4}}}}
+
* {{App|uic|''*.ui'' XML ファイルを読み込み対応する C++ ファイルを生成するツール。|https://doc.qt.io/qt-5/uic.html|Qt 5: {{Pkg|qt5-base}}, Qt 4: {{AUR|qt4}}}}
* {{App|rcc|ビルドプロセスの間に Qt アプリケーションにリソース (画像など) を埋め込むために使われるツール。Qt リソース (.qrc) ファイルで指定されたデータを含む C++ ソースファイルを生成します。|http://qt-project.org/doc/qt-4.8/rcc.html|{{Pkg|qt4}}}}
+
* {{App|rcc|ビルドプロセスの間に Qt アプリケーションにリソース (画像など) を埋め込むために使われるツール。Qt リソース (.qrc) ファイルで指定されたデータを含む C++ ソースファイルを生成します。|https://doc.qt.io/qt-5/rcc.html|Qt 5: {{Pkg|qt5-base}}, Qt 4: {{AUR|qt4}}}}
* {{App|moc|Qt の C++ 拡張を扱うツール (シグナルとスロット、ランタイムタイプ、ダイナミックプロパティなど)。|http://doc.qt.digia.com/4.7-snapshot/moc.html|{{Pkg|qt4}}}}
+
* {{App|moc|Qt の C++ 拡張を扱うツール (シグナルとスロット、ランタイムタイプ、ダイナミックプロパティなど)。|https://doc.qt.io/qt-5/moc.html|Qt 5: {{Pkg|qt5-base}}, Qt 4: {{AUR|qt4}}}}
   
 
=== バインディング ===
 
=== バインディング ===
100行目: 149行目:
   
 
==== C++ ====
 
==== C++ ====
* パッケージ: {{Pkg|qt4}}
+
* パッケージ:
  +
** {{AUR|qt4}} - Qt ツールキットのバージョン 4.x。
* ウェブサイト: http://qt-project.org/
 
  +
** {{Pkg|qt5-base}} - Qt ツールキットのバージョン 5.x。
* ビルド: {{ic|g++ $(pkg-config --cflags --libs QtCore QtGui) -o hello hello.cpp}}
 
  +
* ウェブサイト: https://www.qt.io/developers/
  +
* ビルド:
  +
** Qt4 バージョン: {{ic|g++ $(pkg-config --cflags --libs QtGui) -o hello hello.cpp}}
  +
** Qt5 バージョン: {{ic|g++ $(pkg-config --cflags --libs Qt5Widgets) -fPIC -o hello hello.cpp}}
 
* 実行: {{ic|./hello}}
 
* 実行: {{ic|./hello}}
 
{{hc|hello.cpp|
 
{{hc|hello.cpp|
112行目: 165行目:
 
QApplication app(argc, argv);
 
QApplication app(argc, argv);
 
QLabel hello("Hello world!");
 
QLabel hello("Hello world!");
  +
 
 
hello.show();
 
hello.show();
 
return app.exec();
 
return app.exec();
119行目: 172行目:
   
 
==== QML ====
 
==== QML ====
* パッケージ: {{Pkg|qt4}}
+
* パッケージ: {{AUR|qt4}} または {{Pkg|qt5-declarative}}
* ウェブサイト: http://qt-project.org/
+
* ウェブサイト: https://doc.qt.io/qt-5/qtquick-qmlscene.html
* 実行: {{ic|qmlviewer hello.qml}}
+
* 実行: {{ic|qmlviewer-qt4 hello.qml}} または {{ic|qmlscene-qt5 hello.qml}}
 
{{hc|hello.qml|
 
{{hc|hello.qml|
import QtQuick 1.0
+
import QtQuick 2.3
   
 
Rectangle {
 
Rectangle {
139行目: 192行目:
 
}
 
}
 
}}
 
}}
  +
{{Note|Qt ツールキットのバージョン 5.x の場合、QtQuick 2.y をインポートする必要があります。}}
   
==== Python ====
+
==== Python (PyQt) ====
 
* パッケージ:
 
* パッケージ:
** {{Pkg|python-pyqt4}} - Python 3.x バインディング
+
** {{AUR|python-pyqt4}} - Qt 4 の Python 3.x バインディング
** {{Pkg|python2-pyqt4}} - Python 2.x バインディング
+
** {{AUR|python2-pyqt4}} - Qt 4 の Python 2.x バインディング
  +
** {{Pkg|python-pyqt5}} - Qt 5 の Python 3.x バインディング
* ウェブサイト: http://www.riverbankcomputing.co.uk/software/pyqt/intro
 
  +
** {{Pkg|python2-pyqt5}} - Qt 5 の Python 2.x バインディング
  +
* ウェブサイト: https://riverbankcomputing.com/software/pyqt/intro
 
* 実行: {{ic|python hello-pyqt.py}} または {{ic|python2 hello-pyqt.py}}
 
* 実行: {{ic|python hello-pyqt.py}} または {{ic|python2 hello-pyqt.py}}
 
{{hc|hello-pyqt.py|<nowiki>
 
{{hc|hello-pyqt.py|<nowiki>
157行目: 213行目:
 
}}
 
}}
   
  +
Qt 5.x バージョンの場合、多少変わります:
  +
{{hc|hello-pyqt.py|<nowiki>
  +
import sys
  +
from PyQt5 import QtWidgets
  +
  +
app = QtWidgets.QApplication(sys.argv)
  +
label = QtWidgets.QLabel("Hello world!")
  +
  +
label.show()
  +
sys.exit(app.exec_())</nowiki>
  +
}}
  +
  +
==== Python (PySide) ====
 
* パッケージ:
 
* パッケージ:
** {{Pkg|python-pyside}} - Python 3.x バインディング
+
** {{Pkg|pyside2}} - Python 3.x バインディング
** {{Pkg|python2-pyside}} - Python 2.x バインディング
+
** {{AUR|python2-pyside}} - Python 2.x バインディング
* ウェブサイト: http://www.pyside.org/
+
* ウェブサイト: https://wiki.qt.io/Qt_for_Python
 
* 実行: {{ic|python hello-pyside.py}} または {{ic|python2 hello-pyside.py}}
 
* 実行: {{ic|python hello-pyside.py}} または {{ic|python2 hello-pyside.py}}
 
{{hc|hello-pyside.py|<nowiki>
 
{{hc|hello-pyside.py|<nowiki>
 
import sys
 
import sys
from PySide.QtCore import *
+
from PySide2.QtWidgets import QApplication, QLabel
  +
from PySide.QtGui import *
 
 
 
app = QApplication(sys.argv)
 
app = QApplication(sys.argv)
 
label = QLabel("Hello world!")
 
label = QLabel("Hello world!")
175行目: 243行目:
   
 
==== C# ====
 
==== C# ====
  +
* パッケージ: {{Pkg|kdebindings-qyoto}}
 
  +
[https://gitlab.com/ddobrev/QtSharp QtSharp] を参照してください。
  +
  +
以下の Qyoto はメンテナンスされていません。
  +
  +
* パッケージ: {{aur-mirror|kdebindings-qyoto}}
 
* ウェブサイト: http://techbase.kde.org/Development/Languages/Qyoto
 
* ウェブサイト: http://techbase.kde.org/Development/Languages/Qyoto
 
* ビルド: {{ic|mcs -pkg:qyoto hello.cs}}
 
* ビルド: {{ic|mcs -pkg:qyoto hello.cs}}
194行目: 267行目:
   
 
==== Ruby ====
 
==== Ruby ====
* パッケージ: {{Pkg|kdebindings-qtruby}}
+
* パッケージ: {{aur-mirror|kdebindings-qtruby}}
 
* ウェブサイト: http://rubyforge.org/projects/korundum/
 
* ウェブサイト: http://rubyforge.org/projects/korundum/
 
* 実行: {{ic|ruby hello.rb}}
 
* 実行: {{ic|ruby hello.rb}}
206行目: 279行目:
 
app.exec</nowiki>
 
app.exec</nowiki>
 
}}
 
}}
==== Java ====
 
* パッケージ: {{AUR|qtjambi}}
 
* ウェブサイト: http://qt-jambi.org/
 
{{hc|Hello.java|<nowiki>
 
import com.trolltech.qt.gui.*;
 
   
public class Hello
 
{
 
public static void main(String args[])
 
{
 
QApplication.initialize(args);
 
QLabel hello = new QLabel("Hello World!");
 
 
hello.show();
 
QApplication.exec();
 
}
 
}</nowiki>
 
}}
 
 
==== Perl ====
 
==== Perl ====
* パッケージ: {{Pkg|kdebindings-perlqt}}
+
* パッケージ: {{Pkg|kdebindings-perlqt}}{{Broken package link|{{aur-mirror|kdebindings-perlqt}}}}
* ウェブサイト: http://code.google.com/p/perlqt4/
+
* ウェブサイト: https://code.google.com/p/perlqt4/
 
* 実行: {{ic|perl hello.pl}}
 
* 実行: {{ic|perl hello.pl}}
 
{{hc|hello.pl|<nowiki>
 
{{hc|hello.pl|<nowiki>
239行目: 295行目:
 
}}
 
}}
 
==== Lua ====
 
==== Lua ====
* パッケージ: {{AUR|libqtlua}}
+
* パッケージ: {{AUR|libqtlua}}{{Broken package link|{{aur-mirror|libqtlua}}}}
* ウェブサイト: http://www.nongnu.org/libqtlua/
+
* ウェブサイト: https://www.nongnu.org/libqtlua/
 
* 実行: {{ic|qtlua hello.lua}}
 
* 実行: {{ic|qtlua hello.lua}}
 
{{hc|hello.lua|<nowiki>
 
{{hc|hello.lua|<nowiki>
249行目: 305行目:
 
}}
 
}}
   
  +
{{Note|QtLua は Lua だけを使ってアプリケーションを開発するためには作られていません。Lua をスクリプト言語として使って Qt C++ アプリケーションを拡張するために作成されています。}}
{{Note|QtLua is not designed to develop an application in pure Lua but rather to extend a Qt C++ application using Lua as scripting language.}}
 
  +
  +
== トラブルシューティング ==
  +
  +
=== GNOME Wayland でファイルダイアログを開いたときに Qt プログラムがクラッシュする ===
  +
  +
GNOME Wayland 環境で、 ファイルダイアログを開こうとすると Smplayer や Calibre などの Qt プログラムがクラッシュすることがあります。デフォルトでは Qt はネイティブの GTK ファイルダイアログを使おうとしますが、X11 の使用が想定された作りとなっており Wayland ではセグメンテーション違反になります。問題を解決する方法は2つ存在します:
  +
  +
* Qt プログラムでは X11 GDK バックエンドを使うようにする:
  +
$ GDK_BACKEND=x11 some_qt_program
  +
* 修正が含まれている {{AUR|qgnomeplatform-git}} の最新の git スナップショットをインストールする。GNOME (3.20 以上) ではプラットフォームプラグインが自動的に機能します。機能しない場合、手動で[[環境変数]]を設定してください: {{ic|1=QT_QPA_PLATFORMTHEME=qgnomeplatform}}。環境変数を設定すると [[Qt と GTK アプリケーションの外観の統合]]も行われます。
  +
  +
=== Qt による journal のログ出力を無効化・修正 ===
  +
[[KDE]] などの Qt ベースの[[デスクトップ環境]]を使用すると、systemd の [[systemd#Journal|Journal]] に頻繁にデバッグ用のログが出力される場合があります。
  +
  +
{{ic|QT_LOGGING_RULES}} [[環境変数]]を以下のように設定することで挙動を変えられます:
  +
{{hc|/etc/environment|2=
  +
// Completely disable any logging
  +
QT_LOGGING_RULES='*=false'
  +
  +
// Allow debug info to pass
  +
QT_LOGGING_RULES="*.debug=false"
  +
}}
  +
  +
=== アイコンテーマが適用されない ===
  +
  +
Qt 5.1 から SVG のサポートはモジュールに移動されました。{{Pkg|qt5-base}} は {{Pkg|qt5-svg}} を依存パッケージとしていないため、{{Pkg|qt5-base}} がインストールされていても {{Pkg|qt5-svg}} がインストールされていない場合があります。この場合、SVG がサポートされないためにアイコンが何もエラーを出さずにスキップされてしまい、アイコンテーマが使われなくなってしまいます。{{Pkg|qt5-svg}} をインストールすることで問題は解決します。
  +
  +
=== root で起動したアプリケーションにテーマが適用されない ===
  +
  +
ユーザーテーマファイル ({{ic|$XDG_CONFIG_HOME/Trolltech.conf}}) は他のアカウントから読み込まれないため、[[root で X アプリケーションを起動]]した場合は設定したテーマが適用されません。以下の方法で解決できます:
  +
  +
* シンボリックリンクを作成する。例:
  +
# ln -s /home/[username]/.config/Trolltech.conf /etc/xdg/Trolltech.conf
  +
* システム全体に適用されるテーマファイルを作成: {{ic|/etc/xdg/Trolltech.conf}}。
  +
* root でテーマを設定する。
  +
  +
=== Qt4 スタイルが反映されない ===
  +
  +
(KDE ではない) Qt4 アプリケーションが選択した Qt4 スタイルを使用しない場合、KDE のスタイル (Oxygen や Phase など) がある場所を Qt4 に教える必要があります。{{ic|/etc/profile}} (root 権限がない場合は {{ic|~/.profile}}) に以下を記述して {{ic|QT_PLUGIN_PATH}} 環境変数を設定してください:
  +
  +
export QT_PLUGIN_PATH=$HOME/.kde4/lib/kde4/plugins/:/usr/lib/kde4/plugins/
  +
  +
これで {{ic|qtconfig-qt4}} が KDE のスタイルを見つけられるようになり全てが上手く行くはずです。
  +
  +
もしくは、Qt4 の styles ディレクトリから KDE4 の styles ディレクトリにシンボリックリンクを作成します:
  +
# ln -s /usr/lib/{kde,qt}4/plugins/styles/[theme name]
  +
  +
=== Qt 5.8 で QML を使用するアプリケーションがクラッシュあるいは動作しない ===
  +
  +
Qt 5.8 から、QML に依存するアプリケーション (例: [[SDDM]] や [[KDE]] のプログラム) が {{ic|/home}} や {{ic|/var}} で実行権限を得られないことが原因でクラッシュしたり、正しく機能しなくなることがあります (別のファイルシステムとして {{ic|noexec}} などでマウントしている場合)。クラッシュの原因は '''qmlcache''' 機能が {{ic|.cache}} ディレクトリにファイルを書き出して実行するためです。[https://bbs.archlinux.org/viewtopic.php?id=222486 フォーラムスレッド] を参照してください。
  +
  +
実行権限を許可できない場合、以下のように[[環境変数]]を設定することで解決できます:
  +
{{bc|1=QML_DISABLE_DISK_CACHE=1}}
  +
  +
=== Qt 5 をアップデートした後に Qt 5 ベースのアプリケーションが動かなくなる ===
  +
  +
以下のようなエラーが表示される場合:
  +
  +
Qt FATAL: Cannot mix incompatible Qt library (version 0x50900) with this library (version 0x50901)
  +
  +
最新バージョンの Qt 5 を使ってコンパイルされてない Qt 5 プラットフォームテーマあるいはスタイルプラグインを使っているのがエラーの原因です。特定のバージョンの Qt に依存する Qt のプライベートヘッダーを使っており、soname が一致しません。{{ic|QT_STYLE_OVERRIDE}} と {{ic|QT_QPA_PLATFORMTHEME}} 環境変数をチェックして使用しているテーマ・スタイルを確認し、テーマやスタイルの AUR パッケージを再ビルド・インストールしてください。
   
 
== 参照 ==
 
== 参照 ==
* [http://qt.digia.com/ 公式ウェブサイト]
+
* [https://www.qt.io/ 公式ウェブサイト]
* [http://qt-project.org/ Qt Project]
+
* [https://doc.qt.io/ Qt ドキュメント]
* [http://qt-project.org/doc/qt-4.8/ Qt ドキュメント]
+
* [http://planet.qt.io/ Planet Qt]
* [http://planet.qt-project.org/ Planet Qt]
 
 
* [http://qt-apps.org/ Qt アプリケーション]
 
* [http://qt-apps.org/ Qt アプリケーション]

2019年7月4日 (木) 21:41時点における版

関連記事

Qt はクロスプラットフォームのアプリケーション・ウィジェットツールキットです。標準の C++ を使っていますが言語機能を強化するために特別なコードジェネレータ (Meta Object Compiler もしくは moc) とマクロをフルに活用しています。主な特徴として:

  • 主要なデスクトッププラットフォームと複数のモバイルプラットフォームで動作します。
  • 完全な国際化サポート。
  • SQL データベースのアクセス、XML のパース、スレッド管理、ネットワークのサポートを提供するライブラリと、ファイルを処理するための統一されたクロスプラットフォームのアプリケーションプログラミングインタフェース (API)。

Qt フレームワークは主要な開発プラットフォームの一つとして、KDE ソフトウェアコミュニティや VLC, VirtualBox, Opera, Mathematica, Skype などオープンソース・プロプライエタリ問わず様々なアプリケーションで使われています。

インストール

現在公式リポジトリでは2つのバージョンの Qt が利用可能です。以下のパッケージでインストールできます:

  • Qt 5.xqt5-base パッケージでインストールできます。ドキュメントは qt5-doc パッケージに入っています。
  • Qt 4.xqt4AUR パッケージでインストールできます。ドキュメントは qt4-docAUR パッケージに入っています。
  • Qt 3.xqt3AUR パッケージでインストールできます。ドキュメントは qt3-docAUR パッケージに入っています。

デフォルトの Qt ツールキット

Qt のパッケージ qt5-base/usr/bin にバイナリ (例: qmake) および -qt5 のシンボリックリンクを提供します。Qt 4 以前がインストールされていない場合、特別な設定は必要ありません。

Qt 4 以前では、/usr/bin/qmake などがインストールされず、-qt4, -qt3 のシンボリックリンクが提供されます (例: qmake-qt4, qmake-qt3)。このため Qt3/4 のアプリケーションではコンパイルが失敗するかもしれません。

qtchooserAUR をインストールすることで /usr/bin に在来のバイナリ (例: qmake) を復活させて使用する Qt ツールキットを設定できます。デフォルトでは Qt5 が使われます。

警告: qtchooserAURqt5-base と衝突します。本当に必要な場合は /usr/local にインストールすることができますが、公式にはサポートされていません [1]

環境変数を使う

デフォルトの Qt ツールキットを定義するには、QT_SELECT 環境変数を作成します。例えば、Qt4 に設定するには、シェルの初期化ファイル (~/.bash_profile~/.zprofile など) で export QT_SELECT=4 を実行してください。

設定ファイルを使う

/etc/xdg/qtchooser/ ディレクトリの .conf ファイルに ~/.config/qtchooser/default.conf からシンボリックリンクを張ればデフォルトの Qt ツールキットを設定できます。例えば、Qt4 に設定するには /etc/xdg/qtchooser/4.conf から ~/.config/qtchooser/default.conf にリンクするシンボリックリンクを作成します:

$ ln -s /etc/xdg/qtchooser/4.conf ~/.config/qtchooser/default.conf

外観

Qt4

Qt4 のアプリケーションは動作しているデスクトップ環境の挙動を模倣しようとします、ただし、なにか問題が発生したり、設定がハードコードされている場合は別です。

  • KDE Plasma では、KDE で選択された Qt スタイルが使われます。KDE システム設定 (systemsettings5) を使って設定することができます。設定項目は Appearance > Application Style > Widget Style にあります。
  • Cinnamon, GNOME, Xfce では GTK+ が使われます (QGtkStyle)。
  • 他のデスクトップ環境では、Windows が使われます。

Qt4 アプリケーションのルックアンドフィールを変更したい場合は、(qt4AUR パッケージに含まれている) Qt 設定 (qtconfig-qt4) ツールが使えます。QtConfig を使うことで Qt4 アプリケーションの外観をとてもシンプルに設定することができ、現在の Qt のスタイル・色・フォントなど高度なオプションまで簡単にアクセスすることが可能です。

ノート: GTK+ スタイルを使う場合、色やフォントの設定は無視され、GTK+ 2 から継承されます。

Qt は設定情報を全て /etc/xdg/Trolltech.conf (システム全体) や ~/.config/Trolltech.conf (ユーザー個別) に保存しています。このファイルには外観と関係ない情報が多く含まれているため見づらいですが、変更をファイルの最後に加えれば前の値を上書きできます (変更は [Qt] ヘッダーの下に追加してください)。

例えば、テーマを QtCurve に変更するには、以下を追加します:

~/.config/Trolltech.conf
...
[Qt]
style=QtCurve

Qt4 には次のスタイルが含まれています: CDE, Cleanlooks, GTK+, Motif, Plastique, Windows。他のスタイルは公式リポジトリや AUR からインストールできます (ほとんどのスタイルは KDE Plasma デスクトップ用に作られています):

  • Breeze — Plasma Desktop 用の Breeze ビジュアルスタイルのアートワーク、スタイル、アセット。
https://cgit.kde.org/breeze.git || breeze-kde4AUR
  • Oxygen — KDE Oxygen スタイル。
https://cgit.kde.org/oxygen.git || oxygen-kde4[リンク切れ: アーカイブ: aur-mirror]
  • QtCurve — KDE と GTK のウィジェットスタイルの設定セット。
https://cgit.kde.org/qtcurve.git || qtcurve-qt4[リンク切れ: アーカイブ: aur-mirror]
  • Adwaita-Qt — Qt アプリケーションを GNOME Shell に調和させるスタイル。
https://github.com/MartinBriza/adwaita-qt || adwaita-qt4AUR

Qt5

Qt5 は使われているデスクトップ環境によって使用するスタイルを決定します:

  • KDE Plasma では、KDE Plasma で選択されている Qt テーマが使われます。KDE 5 System Settings (systemsettings5) を使うことで設定できます。設定項目は Appearance > Application Style > Widget Style にあります。
  • Cinnamon, GNOME, MATE, LXDE, Xfce では GTK+ が使われます (QGtkStyle)。
  • 他のデスクトップ環境では、Fusion が使われます。

特定のスタイルを使いたい場合、QT_STYLE_OVERRIDE 環境変数を設定します。特に、GTK+ のテーマを使いたい場合は gtk2 に設定してください (GTK+ のスタイルを使うには Qt スタイルプラグインのインストールが必要です)。Qt5 アプリケーションは -style フラグもサポートしており、特定のスタイルを使って Qt5 アプリケーションを起動することができます。

Qt5 には次のスタイルが含まれています: GTK+, Fusion, Windows。他のスタイルはパッケージからインストールできます:

  • Breeze — Plasma Desktop 用の Breeze ビジュアルスタイルのアートワーク、スタイル、アセット。
https://cgit.kde.org/breeze.git || breeze
  • Oxygen — KDE Oxygen スタイル。
https://cgit.kde.org/oxygen.git || oxygen
  • QtCurve — KDE と GTK のウィジェットスタイルの設定セット。
https://cgit.kde.org/qtcurve.git || qtcurve-qt5
  • Adwaita-Qt — Qt アプリケーションを GNOME Shell に調和させるスタイル。
https://github.com/MartinBriza/adwaita-qt || adwaita-qt5AUR[リンク切れ: パッケージが存在しません]
  • Qt スタイルプラグインGTK+, Cleanlooks, Motif, Plastique などの Qt5 の追加スタイルプラグイン。
http://code.qt.io/cgit/qt/qtstyleplugins.git || qt5-styleplugins

Qt4 アプリの設定をする qtconfig-qt4 のように、qt5ct を使うことで Qt5 アプリのルックアンドフィールをカスタマイズすることができます。

Qt スタイルシート

Qt アプリケーションのルックアンドフィールをカスタマイズするのにスタイルシート、シンプルな CSS ファイルを使うこともできます。スタイルシートを使えば、アプリケーションの全てのウィジェットの外観を修正できます。

他のスタイルを使ってアプリケーションを実行するには、次のように実行してください:

$ qt_application -stylesheet style.qss

Qt スタイルシートの詳細は 公式ドキュメントチュートリアル を見て下さい。スタイルシートの例は Dolphin modification を見て下さい。

GTK+ と Qt

GTK+ と Qt のアプリケーションを使っているならば、それらの見た目が上手く調和しないことに気づくでしょう。GTK+ スタイルと Qt スタイルを調和させたい場合は Qt と GTK アプリケーションの外観の統合を読んで下さい。

KDE 以外の環境で Qt アプリを設定

Qt4 と違って、Qt5 にはフォントやアイコン、スタイルを設定するための qtconfig ユーティリティが含まれていません。代わりに、Qt5 は DE の設定を使用します。KDE や GNOME では問題なく設定が適用されますが、他のマイナーな DE や WM を使っている場合、Qt5 アプリケーションでアイコンが表示されなくなることがあります。環境変数で XDG_CURRENT_DESKTOP=KDEXDG_CURRENT_DESKTOP=GNOME と設定して使っているデスクトップ環境を偽装し、適切なアプリケーションを使ってアイコンセットを設定することで解決できます。

もしくは、DE に依存しない Qt5 QPA の設定ユーティリティが含まれている qt5ct パッケージを使う方法もあります。パッケージをインストールしたら、qt5ct を実行してアイコンテーマを設定し、QT_QPA_PLATFORMTHEME="qt5ct" 環境変数を設定して下さい。それで Qt アプリケーションに設定が反映されます。もしくは Qt5 アプリケーションの引数として --platformtheme qt5ct を指定してください。

ユーザーセッションで QT_QPA_PLATFORMTHEME を自動的に設定するには、以下の行を ~/.profile に追加します:

[ "$XDG_CURRENT_DESKTOP" = "KDE" ] || [ "$XDG_CURRENT_DESKTOP" = "GNOME" ] || export QT_QPA_PLATFORMTHEME="qt5ct"

上記の設定でユーザーセッション全体で QT_QPA_PLATFORMTHEME 環境変数が使われるようになります。~/.profile ファイルを使用せずに独自のカスタム環境変数で設定を行う Enlightenment では上記の設定は機能しません。

以下のエラーが表示された場合、あるいはアプリの中のアイコンが表示されない場合、oxygenoxygen-icons をインストールしてください:

Icon theme "oxygen" not found.
Icon theme "oxygen" not found.
Error: standard icon theme "oxygen" not found!

開発

サポートされているプラットフォーム

Qt はマイナーなプラットフォームを含めて、今日存在するほとんどのプラットフォームをサポートしており、時々移植が増えることもあります。完全なリストは Qt の Wikipedia の記事を見て下さい。

Android

最初に Android SDK と NDK が必要です。SDK の android-sdkAUR (一部のツールが削除されています) または android-sdk-25.2.5AUR と NDK の android-ndk-10eAUR をインストールするか、Android Studio を使用してください。NDK バージョン 10e をインストールすることが強く推奨されています (既知の問題 が存在するため)。

それから Android 用の Qt 5 を入手してください。以下の AUR パッケージでインストールできます (ビルド手順は Qt の wiki ページに載っています):

もしくは Qt Installer を使って入手することもできます。

ツール

以下は公式の Qt ツールです:

  • Qt Creator — Qt のために作られたクロスプラットフォームの IDE で全ての機能をサポート。
https://doc.qt.io/qtcreator/ || qtcreator
  • Qt Linguist — Qt アプリケーションの翻訳や国際化を素早く行うためのツールのセット。
https://doc.qt.io/qt-5/qtlinguist-index.html || Qt 5: qt5-tools, Qt 4: qt4AUR
  • Qt Assistant — Qt qch ファイルの再配布可能で設定可能なドキュメントリーダー。
https://doc.qt.io/qt-5/qtassistant-index.html || Qt 5: qt5-tools, Qt 4: qt4AUR
  • Qt Designer — Qt ウィジェットのためのパワフルなクロスプラットフォームの GUI レイアウト・フォームビルダー。
https://doc.qt.io/qt-5/qtdesigner-manual.html || Qt 5: qt5-tools, Qt 4: qt4AUR
  • Qt Quick Designer — QML ファイルのビジュアルエディタ、WYSIWYG をサポート。Qt Quick アプリケーションを素早くデザインしてスクラッチからコンポーネントを作ることができます。
https://doc.qt.io/qtcreator/creator-using-qt-quick-designer.html || qtcreator
  • qmlscene — QML ドキュメントを読み込むためのツール。QML アプリケーションの開発やデバッグを容易にします。
https://doc.qt.io/qt-5/qtquick-qmlscene.html || Qt 5: qt5-declarative, Qt 4 QML Viewer: qt4AUR
  • qmake — 様々なプラットフォームをまたがった開発プロジェクトのビルドプロセスを簡素化するのを助けるツール。cmake に似ていますが、オプションは少なめで Qt アプリケーションのために作られています。
https://doc.qt.io/qt-5/qmake-manual.html || Qt 5: qt5-base, Qt 4: qt4AUR
  • uic*.ui XML ファイルを読み込み対応する C++ ファイルを生成するツール。
https://doc.qt.io/qt-5/uic.html || Qt 5: qt5-base, Qt 4: qt4AUR
  • rcc — ビルドプロセスの間に Qt アプリケーションにリソース (画像など) を埋め込むために使われるツール。Qt リソース (.qrc) ファイルで指定されたデータを含む C++ ソースファイルを生成します。
https://doc.qt.io/qt-5/rcc.html || Qt 5: qt5-base, Qt 4: qt4AUR
  • moc — Qt の C++ 拡張を扱うツール (シグナルとスロット、ランタイムタイプ、ダイナミックプロパティなど)。
https://doc.qt.io/qt-5/moc.html || Qt 5: qt5-base, Qt 4: qt4AUR

バインディング

Qt は人気のある言語全てにバインディングがあります。完全なリストはここを見て下さい。

以下では 'Hello world!' というメッセージを小さなウィンドウで表示するサンプルを示しています。

C++

  • パッケージ:
    • qt4AUR - Qt ツールキットのバージョン 4.x。
    • qt5-base - Qt ツールキットのバージョン 5.x。
  • ウェブサイト: https://www.qt.io/developers/
  • ビルド:
    • Qt4 バージョン: g++ $(pkg-config --cflags --libs QtGui) -o hello hello.cpp
    • Qt5 バージョン: g++ $(pkg-config --cflags --libs Qt5Widgets) -fPIC -o hello hello.cpp
  • 実行: ./hello
hello.cpp
#include <QApplication>
#include <QLabel>

int main(int argc, char **argv)
{
    QApplication app(argc, argv);
    QLabel hello("Hello world!");

    hello.show();
    return app.exec();
}

QML

hello.qml
import QtQuick 2.3

Rectangle {
    id: page
    width: 400; height: 100
    color: "lightgray"

    Text {
        id: helloText
        text: "Hello world!"
        anchors.horizontalCenter: page.horizontalCenter
        anchors.verticalCenter: page.verticalCenter
        font.pointSize: 24; font.bold: true
    }
}
ノート: Qt ツールキットのバージョン 5.x の場合、QtQuick 2.y をインポートする必要があります。

Python (PyQt)

hello-pyqt.py
import sys
from PyQt4 import QtGui

app = QtGui.QApplication(sys.argv)
label = QtGui.QLabel("Hello world!")

label.show()
sys.exit(app.exec_())

Qt 5.x バージョンの場合、多少変わります:

hello-pyqt.py
import sys
from PyQt5 import QtWidgets

app = QtWidgets.QApplication(sys.argv)
label = QtWidgets.QLabel("Hello world!")

label.show()
sys.exit(app.exec_())

Python (PySide)

hello-pyside.py
import sys
from PySide2.QtWidgets import QApplication, QLabel

app = QApplication(sys.argv)
label = QLabel("Hello world!")

label.show()
sys.exit(app.exec_())

C#

QtSharp を参照してください。

以下の Qyoto はメンテナンスされていません。

hello.cs
using System;
using Qyoto;

public class Hello {
    public static int Main(String[] args) {
        new QApplication(args);
        new QLabel("Hello world!").Show();

        return QApplication.Exec();
    }
}

Ruby

hello.rb
require 'Qt4'
 
app = Qt::Application.new(ARGV)
hello = Qt::Label.new('Hello World!')

hello.show 
app.exec

Perl

hello.pl
use QtGui4;

my $a = Qt::Application(\@ARGV);
my $hello = Qt::Label("Hello World!", undef);

$hello->show;
exit $a->exec;

Lua

hello.lua
label = qt.new_widget("QLabel")

label:setText("Hello World!")
label:show()
ノート: QtLua は Lua だけを使ってアプリケーションを開発するためには作られていません。Lua をスクリプト言語として使って Qt C++ アプリケーションを拡張するために作成されています。

トラブルシューティング

GNOME Wayland でファイルダイアログを開いたときに Qt プログラムがクラッシュする

GNOME Wayland 環境で、 ファイルダイアログを開こうとすると Smplayer や Calibre などの Qt プログラムがクラッシュすることがあります。デフォルトでは Qt はネイティブの GTK ファイルダイアログを使おうとしますが、X11 の使用が想定された作りとなっており Wayland ではセグメンテーション違反になります。問題を解決する方法は2つ存在します:

  • Qt プログラムでは X11 GDK バックエンドを使うようにする:
$ GDK_BACKEND=x11 some_qt_program
  • 修正が含まれている qgnomeplatform-gitAUR の最新の git スナップショットをインストールする。GNOME (3.20 以上) ではプラットフォームプラグインが自動的に機能します。機能しない場合、手動で環境変数を設定してください: QT_QPA_PLATFORMTHEME=qgnomeplatform。環境変数を設定すると Qt と GTK アプリケーションの外観の統合も行われます。

Qt による journal のログ出力を無効化・修正

KDE などの Qt ベースのデスクトップ環境を使用すると、systemd の Journal に頻繁にデバッグ用のログが出力される場合があります。

QT_LOGGING_RULES 環境変数を以下のように設定することで挙動を変えられます:

/etc/environment
// Completely disable any logging
QT_LOGGING_RULES='*=false'

// Allow debug info to pass
QT_LOGGING_RULES="*.debug=false"

アイコンテーマが適用されない

Qt 5.1 から SVG のサポートはモジュールに移動されました。qt5-baseqt5-svg を依存パッケージとしていないため、qt5-base がインストールされていても qt5-svg がインストールされていない場合があります。この場合、SVG がサポートされないためにアイコンが何もエラーを出さずにスキップされてしまい、アイコンテーマが使われなくなってしまいます。qt5-svg をインストールすることで問題は解決します。

root で起動したアプリケーションにテーマが適用されない

ユーザーテーマファイル ($XDG_CONFIG_HOME/Trolltech.conf) は他のアカウントから読み込まれないため、root で X アプリケーションを起動した場合は設定したテーマが適用されません。以下の方法で解決できます:

  • シンボリックリンクを作成する。例:
# ln -s /home/[username]/.config/Trolltech.conf /etc/xdg/Trolltech.conf
  • システム全体に適用されるテーマファイルを作成: /etc/xdg/Trolltech.conf
  • root でテーマを設定する。

Qt4 スタイルが反映されない

(KDE ではない) Qt4 アプリケーションが選択した Qt4 スタイルを使用しない場合、KDE のスタイル (Oxygen や Phase など) がある場所を Qt4 に教える必要があります。/etc/profile (root 権限がない場合は ~/.profile) に以下を記述して QT_PLUGIN_PATH 環境変数を設定してください:

export QT_PLUGIN_PATH=$HOME/.kde4/lib/kde4/plugins/:/usr/lib/kde4/plugins/

これで qtconfig-qt4 が KDE のスタイルを見つけられるようになり全てが上手く行くはずです。

もしくは、Qt4 の styles ディレクトリから KDE4 の styles ディレクトリにシンボリックリンクを作成します:

# ln -s /usr/lib/{kde,qt}4/plugins/styles/[theme name]

Qt 5.8 で QML を使用するアプリケーションがクラッシュあるいは動作しない

Qt 5.8 から、QML に依存するアプリケーション (例: SDDMKDE のプログラム) が /home/var で実行権限を得られないことが原因でクラッシュしたり、正しく機能しなくなることがあります (別のファイルシステムとして noexec などでマウントしている場合)。クラッシュの原因は qmlcache 機能が .cache ディレクトリにファイルを書き出して実行するためです。フォーラムスレッド を参照してください。

実行権限を許可できない場合、以下のように環境変数を設定することで解決できます:

QML_DISABLE_DISK_CACHE=1

Qt 5 をアップデートした後に Qt 5 ベースのアプリケーションが動かなくなる

以下のようなエラーが表示される場合:

Qt FATAL: Cannot mix incompatible Qt library (version 0x50900) with this library (version 0x50901)

最新バージョンの Qt 5 を使ってコンパイルされてない Qt 5 プラットフォームテーマあるいはスタイルプラグインを使っているのがエラーの原因です。特定のバージョンの Qt に依存する Qt のプライベートヘッダーを使っており、soname が一致しません。QT_STYLE_OVERRIDEQT_QPA_PLATFORMTHEME 環境変数をチェックして使用しているテーマ・スタイルを確認し、テーマやスタイルの AUR パッケージを再ビルド・インストールしてください。

参照