「Qt」の版間の差分
(同期) |
|||
(6人の利用者による、間の31版が非表示) | |||
1行目: | 1行目: | ||
[[Category:ウィジェットツールキット]] |
[[Category:ウィジェットツールキット]] |
||
[[en:Qt]] |
[[en:Qt]] |
||
+ | [[es:Qt]] |
||
[[ru:Qt]] |
[[ru:Qt]] |
||
− | [[zh- |
+ | [[zh-hans:Qt]] |
{{Related articles start}} |
{{Related articles start}} |
||
{{Related|KDE}} |
{{Related|KDE}} |
||
{{Related|Qt と GTK アプリケーションの外観の統合}} |
{{Related|Qt と GTK アプリケーションの外観の統合}} |
||
− | {{Related|GTK |
+ | {{Related|GTK}} |
{{Related articles end}} |
{{Related articles end}} |
||
− | [ |
+ | [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]] ソフトウェアコミュニティや [[ |
+ | Qt フレームワークは主要な開発プラットフォームの一つとして、[[KDE]] ソフトウェアコミュニティや [[VLC]]、[[VirtualBox]]、[[Mathematica]] など重要なオープンソース・プロプライエタリなアプリケーションで使われています。 |
== インストール == |
== インストール == |
||
+ | |||
− | 現在[[公式リポジトリ]]では2つのバージョンの Qt が利用可能です。以下のパッケージで[[Pacman|インストール]]できます: |
||
+ | Qt 6.x および 5.x は[[公式リポジトリ]]から入手できます。Qt のレガシーバージョン(4.x および 3.x) は [[AUR]]から入手できます。以下のパッケージで[[Pacman|インストール]]できます: |
||
+ | * '''Qt 6.x''' は {{Pkg|qt6-base}} パッケージでインストールできます。ドキュメントは {{Pkg|qt6-doc}} パッケージに入っています。 |
||
* '''Qt 5.x''' は {{Pkg|qt5-base}} パッケージでインストールできます。ドキュメントは {{Pkg|qt5-doc}} パッケージに入っています。 |
* '''Qt 5.x''' は {{Pkg|qt5-base}} パッケージでインストールできます。ドキュメントは {{Pkg|qt5-doc}} パッケージに入っています。 |
||
− | * '''Qt 4.x''' は {{ |
+ | * '''Qt 4.x''' は {{AUR|qt4}} パッケージでインストールできます。ドキュメントは {{AUR|qt4-doc}} パッケージに入っています。 |
− | * '''Qt 3.x''' は {{AUR|qt3}} パッケージでインストールできます。ドキュメント |
+ | * '''Qt 3.x''' は {{AUR|qt3}} パッケージでインストールできます。ドキュメントのパッケージはありません。 |
+ | == デフォルトの Qt ツールキット == |
||
− | {{Warning|Qt のパッケージは {{ic|/usr/bin}} にバイナリ (例: ''qmake'') を提供しません。代わりに {{ic|-qt5}}, {{ic|-qt4}}, {{ic|-qt3}} のシンボリックリンクが提供されます (例: {{ic|qmake-qt5}}, {{ic|qmake-qt4}}, {{ic|qmake-qt3}})。このため Qt3/4 のアプリケーションではコンパイルが失敗するかもしれません。在来のバイナリをインストールするには、[[#デフォルトの Qt ツールキット]]セクションを見て下さい。}} |
||
+ | {{AUR|qtchooser}}{{Broken package link|package not found}} をインストールすることで、{{ic|/usr/bin}} 内の Qt のバイナリ (例: ''qmake'') を、それの古いバージョン (例: ''qmake-qt4'' や ''qmake-qt3'') を指すように変更できます (デフォルトでは Qt 5 のバージョン (例: ''qmake-qt5'') を指しています)。 |
||
− | === Qt5 プラットフォームプラグインと依存パッケージ === |
||
− | {{Pkg|qt5-base}} を使うと Qt5 がインストールされます。Qt5 は [http://doc.qt.io/qt-5/qpa.html platform abstractions] を利用しますが、プラットフォームアブストラクションのプラグインの依存パッケージが足りないことがあります。Qt は依存パッケージの依存関係を解決する代わりに、プラグインが使えないという表示をします。例えば、アプリケーションが [http://xcb.freedesktop.org xcb] に依存していて、xcb ライブラリの依存パッケージがインストールされていない場合、Qt は以下のように報告します: |
||
+ | {{Note|現在、{{AUR|qtchooser}}{{Broken package link|package not found}} は {{Pkg|qt5-base}} と衝突しています。これを本当に必要としているならば、{{ic|/usr/local}} にインストールすることができます。しかし、公式にはもはやサポートされていません。{{Bug|51308}} を参照してください。}} |
||
− | This application failed to start because it could not find or load the Qt platform plugin "xcb". Available plugins are: xcb. |
||
− | |||
− | Reinstalling the application may fix this problem. |
||
− | |||
− | Qt5 のページではインストールするべき [http://doc.qt.io/qt-5/linux-requirements.html パッケージのリスト] を公開していますが、何も考えず全てのパッケージをインストールするのは Arch ライクとは言えないでしょう。代わりに、(上記の xcb の場合、libqxcb.so) プラグインを確認して、{{ic|ldd}} を使ってインストールされていない依存パッケージを確認することができます。その依存パッケージをインストールすることで問題は解決するはずです。 |
||
− | |||
− | == デフォルトの Qt ツールキット == |
||
− | {{Pkg|qtchooser}} をインストールすることで {{ic|/usr/bin}} に在来のバイナリ (例: ''qmake'') を復活させて使用する Qt ツールキットを設定できます。デフォルトでは Qt5 が使われます。 |
||
=== 環境変数を使う === |
=== 環境変数を使う === |
||
+ | |||
− | デフォルトの Qt ツールキットを定義するには、{{ic|QT_SELECT}} [[環境変数]]を作成します。例えば、Qt4 に設定するには、シェルの初期化ファイル ({{ic|~/.bash_profile}} や {{ic|~/.zsh_profile}} など) で {{ic|1=export QT_SELECT=4}} を実行してください。 |
||
+ | {{ic|QT_SELECT}} [[環境変数]]を使用して、デフォルトの Qt ツールキットを定義することができます。例えば、Qt ''n'' を使う場合、{{ic|1=QT_SELECT=''n''}} を設定します。 |
||
=== 設定ファイルを使う === |
=== 設定ファイルを使う === |
||
+ | |||
− | {{ic|/etc/xdg/qtchooser/}} ディレクトリの ''.conf'' ファイルに {{ic|~/.config/qtchooser/default.conf}} からシンボリックリンクを張ればデフォルトの Qt ツールキットを設定できます。例えば、Qt4 に設定するには {{ic|/etc/xdg/qtchooser/4.conf}} から {{ic|~/.config/qtchooser/default.conf}} にリンクするシンボリックリンクを作成します: |
||
+ | {{Out of date|{{AUR|qtchooser}}{{Broken package link|package not found}} はもはや公式にサポートされていません。}} |
||
+ | |||
+ | {{ic|/etc/xdg/qtchooser/}} ディレクトリ内の ''.conf'' ファイルを指すシンボリックリンク {{ic|~/.config/qtchooser/default.conf}} を作成することで、デフォルトの Qt ツールキットを設定できます。例えば、Qt 4 に設定するには、{{ic|/etc/xdg/qtchooser/4.conf}} を指すシンボリックリンク {{ic|~/.config/qtchooser/default.conf}} を作成します: |
||
+ | |||
$ ln -s {{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 5 のスタイル === |
||
− | Qt4 のアプリケーションは動作しているデスクトップ環境の挙動を模倣しようとします、ただし、なにか問題が発生したり、設定がハードコードされている場合は別です。 |
||
+ | |||
− | * KDE 4 では、KDE で選択された Qt スタイルが使われます。''KDE System Settings'' (''systemsettings'') を使って設定することができます。設定項目は ''Common Appearance and Behavior > Application Appearance > Style > Widget Style'' にあります。 |
||
+ | {{Out of date|{{Pkg|qt5-base}} はもはや QGtkStyle を使用しません。}} |
||
− | * KDE Plasma 5 では、Plastique が使われます。 |
||
+ | |||
− | * Cinnamon, GNOME, Xfce では GTK+ が使われます ([[Qt と GTK アプリケーションの外観の統合#QGtkStyle|QGtkStyle]])。 |
||
+ | Qt5 は使われているデスクトップ環境によって使用するスタイルを決定します: |
||
+ | |||
+ | * KDE Plasma では、実際に選択されている Qt スタイルが使われます。''KDE 5 System Settings'' (''systemsettings'') を使うことで設定できます。設定項目は ''Appearance > Application Style > Widget Style'' にあります。 |
||
+ | * Cinnamon、GNOME、MATE、LXDE、Xfce では GTK が使われます ([[Qt と GTK アプリケーションの外観の統合#QGtkStyle|QGtkStyle]])。 |
||
+ | * 他のデスクトップ環境では、Fusion が使われます。 |
||
+ | |||
+ | 特定のスタイルを強制するには、{{ic|1=QT_STYLE_OVERRIDE}} [[環境変数]]を設定してください。特に、[[GTK]] のテーマを使いたい場合は {{ic|gtk2}} に設定してください (注: GTK のスタイルを使うには、以下で説明されている Qt スタイルプラグインのインストールが必要です)。Qt 5 アプリケーションは {{ic|-style}} フラグもサポートしており、特定のスタイルを使って Qt 5 アプリケーションを起動することができます。 |
||
+ | |||
+ | Qt 5 には次のスタイルが含まれています: ''Fusion''、''Windows''。他のスタイルは別途インストールできます: |
||
+ | |||
+ | * {{App|Breeze|Plasma Desktop 用の Breeze ビジュアルスタイルのアートワーク、スタイル、アセット。|https://invent.kde.org/plasma/breeze|{{Pkg|breeze}}}} |
||
+ | * {{App|Oxygen|KDE Oxygen スタイル。|https://invent.kde.org/plasma/oxygen|{{Pkg|oxygen}}}} |
||
+ | * {{App|Lightly|Lightly は、視覚的にモダンでミニマルであることを目指す、breeze テーマのフォークです。|https://github.com/Luwx/Lightly|{{AUR|lightly-git}}{{Broken package link|package not found}}}} |
||
+ | |||
+ | * {{App|QtCurve|KDE と GTK のウィジェットスタイルの設定セット。|https://invent.kde.org/system/qtcurve|{{Pkg|qtcurve-qt5}}{{Broken package link|package not found}}}} |
||
+ | * {{App|Adwaita-Qt|Qt アプリケーションを GNOME Shell に調和させるスタイル。|https://github.com/MartinBriza/adwaita-qt|{{AUR|adwaita-qt5-git}}}} |
||
+ | * {{App|Qt style plugins|''GTK''、''Cleanlooks''、''Motif''、''Plastique'' などの Qt5 の追加スタイルプラグイン。|https://code.qt.io/cgit/qt/qtstyleplugins.git|{{AUR|qt5-styleplugins}}}} |
||
+ | * {{App|Kvantum|''Adapta''、''Arc''、''Ambiance'' などの人気な GTK テーマと同じ見た目のスタイルが含まれている、マスタマイズ可能な SVG ベースのテーマエンジン。|https://github.com/tsujan/Kvantum/tree/master/Kvantum|{{Pkg|kvantum}}}} |
||
+ | |||
+ | === Qt 4 のスタイル === |
||
+ | |||
+ | Qt 4 のアプリケーションは動作しているデスクトップ環境の挙動を模倣しようとします、ただし、なにか問題が発生したり、設定がハードコードされている場合は別です。 |
||
+ | |||
+ | * KDE Plasma では、実際に選択されている Qt スタイルが使われます。''KDE システム設定'' (''systemsettings'') を使って設定することができます。設定項目は ''Appearance > Application Style > Widget Style'' にあります。 |
||
+ | * Cinnamon、GNOME、Xfce では GTK が使われます ([[Qt と GTK アプリケーションの外観の統合#QGtkStyle|QGtkStyle]])。 |
||
* 他のデスクトップ環境では、Windows が使われます。 |
* 他のデスクトップ環境では、Windows が使われます。 |
||
− | Qt4 アプリケーションのルックアンドフィールを変更したい場合は、''Qt 設定'' ( |
+ | Qt4 アプリケーションのルックアンドフィールを変更したい場合は、({{AUR|qt4}} パッケージに含まれている) ''Qt 設定'' (''qtconfig-qt4'') ツールが使えます。''QtConfig'' を使うことで Qt 4 アプリケーションの外観をとてもシンプルに設定することができ、現在の Qt のスタイル・色・フォントなど高度なオプションまで簡単にアクセスすることが可能です。 |
− | {{Note|''GTK |
+ | {{Note|''GTK'' スタイルを使う場合、色やフォントの設定は無視され、GTK 2 から継承されます。}} |
− | Qt は設定情報を全て {{ic|/etc/xdg/Trolltech.conf}} (システム全体) や {{ic|~/.config/Trolltech.conf}} (ユーザー個別) に保存しています。このファイルには外観と関係ない情報が多く含まれているため見づらいですが、変更をファイルの最後に加えれば前の値を上書きできます (変更は |
+ | Qt は設定情報を全て {{ic|/etc/xdg/Trolltech.conf}} (システム全体) や {{ic|~/.config/Trolltech.conf}} (ユーザー個別) に保存しています。このファイルには外観と関係ない情報が多く含まれているため見づらいですが、変更をファイルの最後に加えれば前の値を上書きできます (変更は [Qt] ヘッダーの下に追加してください)。 |
例えば、テーマを QtCurve に変更するには、以下を追加します: |
例えば、テーマを QtCurve に変更するには、以下を追加します: |
||
+ | |||
{{hc|~/.config/Trolltech.conf|<nowiki> |
{{hc|~/.config/Trolltech.conf|<nowiki> |
||
... |
... |
||
63行目: | 90行目: | ||
</nowiki>}} |
</nowiki>}} |
||
− | + | Qt 4 には次のスタイルが含まれています: ''CDE''、''Cleanlooks''、''GTK''、''Motif''、''Plastique''、''Windows''。他のスタイルは別途インストールできます: |
|
− | * {{App|Breeze|Plasma Desktop 用の Breeze ビジュアルスタイルのアートワーク、スタイル、アセット。|https://projects.kde.org/projects/kde/workspace/breeze|{{Pkg|breeze-kde4}}}} |
||
− | * {{App|[[Wikipedia:Oxygen Project|Oxygen]]|KDE Oxygen スタイル。|https://projects.kde.org/projects/kde/workspace/oxygen|{{Pkg|oxygen-kde4}}}} または {{Pkg|kdebase-workspace}} |
||
− | * {{App|QtCurve|KDE と GTK のウィジェットスタイルの設定セット。|https://projects.kde.org/projects/playground/base/qtcurve|{{Pkg|qtcurve-qt4}}}} |
||
− | * {{App|Phase|機能的でありながら単調ではない、美麗でありながら散漫ではないウィジェットスタイル。|http://kde-look.org/content/show.php?content=11402|{{Pkg|kdeartwork-styles}}}} |
||
− | * {{App|Skulpture|KDE と Qt プログラムの GUI スタイルアドオン。ビジュアルエクスペリエンスを向上させる影とグラデーションによるクラシカルで立体的なアートワークが特徴。|http://kde-look.org/content/show.php/?content=59031|{{AUR|skulpture}}{{Broken package link|{{aur-mirror|skulpture}}}}}} |
||
− | * {{App|Bespin|細かくカスタマイズできる KDE テーマ。|http://cloudcity.sourceforge.net/frame.php|{{AUR|bespin-svn}}{{Broken package link|{{aur-mirror|bespin-svn}}}}}} |
||
+ | * {{App|Adwaita-Qt|Qt アプリケーションを GNOME Shell に調和させるスタイル。|https://github.com/MartinBriza/adwaita-qt|{{AUR|adwaita-qt4}}}} |
||
− | === Qt5 === |
||
− | Qt5 は使われているデスクトップ環境によって使用するスタイルを決定します: |
||
− | * KDE Plasma 5 では、KDE Plasma 5 で選択されている Qt テーマが使われます。''KDE 5 System Settings'' (''systemsettings5'') を使うことで設定できます。設定項目は ''Appearance > Application Style > Widget Style'' にあります。 |
||
− | * KDE 4 では Oxygen (利用可能な場合) または Fusion が使われます。 |
||
− | * Cinnamon, GNOME, MATE, LXDE, Xfce では GTK+ が使われます ([[Qt と GTK アプリケーションの外観の統合#QGtkStyle|QGtkStyle]])。 |
||
− | * 他のデスクトップ環境では、Fusion が使われます。 |
||
+ | === Qt スタイルシート === |
||
− | 特定のスタイルを使いたい場合、{{ic|QT_STYLE_OVERRIDE}} 環境変数を設定します。特に、gtk テーマを使いたい場合は {{ic|GTK+}} に設定してください。Qt5 アプリケーションは {{ic|-style}} フラグもサポートしており、特定のスタイルを使って Qt5 アプリケーションを起動することができます。 |
||
− | Qt5 には次のスタイルが含まれています: ''GTK+'', ''Fusion'', ''Windows''。他のスタイルは公式リポジトリからインストールできます: |
||
− | * {{App|Breeze|Plasma Desktop 用の Breeze ビジュアルスタイルのアートワーク、スタイル、アセット。|https://projects.kde.org/projects/kde/workspace/breeze|{{Pkg|breeze}}}} |
||
− | * {{App|Oxygen|KDE Oxygen スタイル。|https://projects.kde.org/projects/kde/workspace/oxygen|{{Pkg|oxygen}}}} |
||
− | * {{App|QtCurve|KDE と GTK のウィジェットスタイルの設定セット。|https://projects.kde.org/projects/playground/base/qtcurve|{{Pkg|qtcurve-qt5}}}} |
||
− | |||
− | Qt4 アプリの設定をする {{ic|qtconfig-qt4}} のように、{{pkg|qt5ct}} を使うことで Qt5 アプリのルックアンドフィールをカスタマイズすることができます。 |
||
− | |||
− | === Qt スタイルシート === |
||
Qt アプリケーションのルックアンドフィールをカスタマイズするのにスタイルシート、シンプルな CSS ファイルを使うこともできます。スタイルシートを使えば、アプリケーションの全てのウィジェットの外観を修正できます。 |
Qt アプリケーションのルックアンドフィールをカスタマイズするのにスタイルシート、シンプルな CSS ファイルを使うこともできます。スタイルシートを使えば、アプリケーションの全てのウィジェットの外観を修正できます。 |
||
他のスタイルを使ってアプリケーションを実行するには、次のように実行してください: |
他のスタイルを使ってアプリケーションを実行するには、次のように実行してください: |
||
+ | |||
$ qt_application -stylesheet ''style.qss'' |
$ qt_application -stylesheet ''style.qss'' |
||
− | Qt スタイルシートの詳細は [ |
+ | Qt スタイルシートの詳細は [https://doc.qt.io/qt-5/stylesheet-reference.html 公式ドキュメント] や他の[http://thesmithfam.org/blog/2009/09/10/qt-stylesheets-tutorial/ チュートリアル] を見て下さい。スタイルシートの例はこの [https://kde-apps.org/content/show.php/roxydoxy?content=125979 Dolphin の変更]を見て下さい。 |
− | === GTK |
+ | === GTK と Qt === |
− | GTK+ と Qt のアプリケーションを使っているならば、それらの見た目が上手く調和しないことに気づくでしょう。GTK+ スタイルと Qt スタイルを調和させたい場合は [[Qt と GTK アプリケーションの外観の統合]]を読んで下さい。 |
||
+ | GTK と Qt のアプリケーションを使っているならば、それらの見た目が上手く調和しないことに気づくでしょう。GTK スタイルと Qt スタイルを調和させたい場合は [[Qt と GTK アプリケーションの外観の統合]] を読んで下さい。 |
||
− | === KDE 以外の環境で Qt アプリを設定 === |
||
+ | === KDE Plasma 以外の環境での Qt 5/6 アプリケーションの設定 === |
||
− | Qt4 と違って、Qt5 にはフォントやアイコン、スタイルを設定するための qtconfig ユーティリティが含まれていません。代わりに、Qt5 は DE の設定を使用します。KDE や GNOME では問題なく設定が適用されますが、他のマイナーな DE や WM を使っている場合、Qt5 アプリケーションでアイコンが表示されなくなることがあります。環境変数で {{ic|1=XDG_CURRENT_DESKTOP=KDE}} や {{ic|1=XDG_CURRENT_DESKTOP=GNOME}} と設定して使っているデスクトップ環境を偽装し、適切なアプリケーションを使ってアイコンセットを設定することで解決できます。 |
||
+ | Qt 4 と違って、Qt 5 にはフォントやアイコン、スタイルを設定するための qtconfig ユーティリティが含まれていません。代わりに、Qt 5 は、実行中のデスクトップ環境の設定の使用を試みます。KDE Plasma や GNOME では問題なく設定が適用されますが、他のマイナーなデスクトップ環境やウィンドウマネージャを使っている場合、Qt 5 アプリケーションでアイコンが表示されなくなることがあります。環境変数で {{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 アプリケーションに設定が反映されます。 |
||
+ | |||
+ | もしくは、デスクトップ環境に依存しない Qt 5 [https://wiki.qt.io/Qt_Platform_Abstraction QPA] の設定ユーティリティが含まれている {{pkg|qt5ct}}/{{pkg|qt6ct}} パッケージを使う方法もあります。パッケージをインストールしたら、{{ic|qt5ct}}/{{ic|qt6ct}} を実行してアイコンテーマを設定し、{{ic|1=QT_QPA_PLATFORMTHEME=qt5ct:qt6ct}} [[環境変数]]を設定して下さい。それで Qt アプリケーションに設定が反映されます。もしくは Qt 5 アプリケーションの引数として {{ic|--platformtheme qt5ct}} を指定してください。 |
||
+ | |||
+ | {{AUR|qt5ct-kde}} は、(KDE QML アプリケーションを含む) KDE アプリケーションとのより良い統合が可能な、パッチ適用済みの ''qt5ct'' を提供します。 |
||
+ | |||
+ | 以下のエラーが表示され、一部のアプリで一部のアイコンが表示されない場合、{{pkg|oxygen}} と {{pkg|oxygen-icons}} をインストールしてください: |
||
+ | |||
+ | Icon theme "oxygen" not found. |
||
+ | Icon theme "oxygen" not found. |
||
+ | Error: standard icon theme "oxygen" not found! |
||
== 開発 == |
== 開発 == |
||
=== サポートされているプラットフォーム === |
=== サポートされているプラットフォーム === |
||
+ | |||
− | Qt はマイナーなプラットフォームを含めて、今日存在するほとんどのプラットフォームをサポートしており、時々移植が増えることもあります。完全なリストは [[Wikipedia:Qt_(framework)#Platforms|Qt の Wikipedia の記事]]を見て下さい。 |
||
+ | Qt は、一部の時代遅れなプラットフォームを含めて、今日存在するほとんどのプラットフォームをサポートしており、時々移植が増えることもあります。完全なリストは [[Wikipedia:Qt_(framework)#Platforms|Qt の Wikipedia の記事]]を見て下さい。 |
||
==== Android ==== |
==== Android ==== |
||
+ | {{Note|Qt Creator 4.12 及びそれ以降では、SDK Tools、NDK、必須パッケージを自動的にセットアップできます。詳細は [https://doc.qt.io/qtcreator/creator-developing-android.html#specifying-android-device-settings Qt Creator: Specifying Android Device Settings] を参照してください。}} |
||
− | [http://download.qt.io/official_releases/qt/5.5/5.5.1/qt-opensource-linux-x64-android-5.5.1.run Qt for Android installer] を使って下さい。 |
||
+ | |||
+ | まず、[[AUR]] か [[Android|Android Studio]] を使って、[[Android|Android SDK]] と NDK を入手する必要があります。 |
||
+ | |||
+ | SDK は [[OpenJDK]] も必要とします。Qt バージョンごとに異なるバージョン要件が存在します。詳細は[https://doc.qt.io/qt-6/android-getting-started.html このページ]を確認してください。 |
||
+ | |||
+ | 次に、Android 用の Qt 5 を入手する必要があります。以下で説明されているように [[AUR]] からインストールすることもできますし、自分でビルドすることもできます。Qt [https://wiki.qt.io/Android wiki] ページでビルド手順を見ることができます。 |
||
+ | |||
+ | 問題が発生した場合は、[https://wiki.qt.io/Qt_for_Android_known_issues 既知の問題]を確認すると良いでしょう。 |
||
+ | |||
+ | * {{AUR|android-armv7a-eabi-qt5}} - armeabi-v7a |
||
+ | * {{AUR|android-aarch64-qt5}} - aarch64 |
||
+ | * {{AUR|android-x86-qt5}} - x86 |
||
+ | * {{AUR|android-x86-64-qt5}} - x86_64 |
||
+ | |||
+ | もしくは、[https://download.qt.io/official_releases/qt/ 公式の Qt インストーラ]を使うこともできます。 |
||
=== ツール === |
=== ツール === |
||
117行目: | 151行目: | ||
以下は公式の Qt ツールです: |
以下は公式の Qt ツールです: |
||
− | * {{App|[[Wikipedia:Qt Creator|Qt Creator]]|Qt のために作られたクロスプラットフォームの IDE で全ての機能をサポート。| |
+ | * {{App|[[Wikipedia:Qt Creator|Qt Creator]]|Qt のために作られたクロスプラットフォームの IDE で、全ての機能をサポート。|https://doc.qt.io/qtcreator/|{{Pkg|qtcreator}}}} |
− | * {{App|Qt Linguist|Qt アプリケーションの翻訳や国際化を素早く行うためのツールのセット。| |
+ | * {{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'' ファイルの再配布可能で設定可能なドキュメントリーダー。| |
+ | * {{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 レイアウト |
+ | * {{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 アプリケーションを素早くデザインして |
+ | * {{App|Qt Quick Designer|QML ファイルのビジュアルエディタ、WYSIWYG をサポート。Qt Quick アプリケーションを素早くデザインしてゼロからコンポーネントを作ることができます。|https://doc.qt.io/qtcreator/creator-qtquickdesigner-plugin.html|{{Pkg|qtcreator}}}} |
− | * {{App| |
+ | * {{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 |
+ | * {{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++ ファイルを生成するツール。| |
+ | * {{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++ ソースファイルを生成します。| |
+ | * {{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++ 拡張を扱うツール (シグナルとスロット、 |
+ | * {{App|moc|Qt の C++ 拡張を扱うツール (シグナルとスロット機構、実行時型情報、動的プロパティシステムなど)。|https://doc.qt.io/qt-5/moc.html|Qt 5: {{Pkg|qt5-base}}, Qt 4: {{AUR|qt4}}}} |
=== バインディング === |
=== バインディング === |
||
+ | |||
− | Qt は人気のある言語全てにバインディングがあります。完全なリストは[[Wikipedia:ja:Qt#バインダ|ここ]]を見て下さい。 |
||
+ | Qt には人気な言語のすべてに対してバインディングが存在します。完全なリストは https://wiki.qt.io/Language_Bindings を参照してください。 |
||
以下では 'Hello world!' というメッセージを小さなウィンドウで表示するサンプルを示しています。 |
以下では 'Hello world!' というメッセージを小さなウィンドウで表示するサンプルを示しています。 |
||
==== C++ ==== |
==== C++ ==== |
||
+ | |||
− | * パッケージ: |
||
+ | * パッケージ: {{Pkg|qt5-base}} |
||
− | ** {{Pkg|qt4}} - Qt ツールキットのバージョン 4.x。 |
||
+ | * ウェブサイト: https://www.qt.io/developers/ |
||
− | ** {{Pkg|qt5-base}} - Qt ツールキットのバージョン 5.x。 |
||
+ | * ビルド: {{ic|g++ $(pkg-config --cflags --libs Qt5Widgets) -fPIC -o hello hello.cpp}} |
||
− | * ウェブサイト: http://qt-project.org/ |
||
+ | * 実行コマンド: {{ic|./hello}} |
||
− | * ビルド: |
||
+ | |||
− | ** Qt4 バージョン: {{ic|g++ $(pkg-config --cflags --libs QtGui) -o hello hello.cpp}} |
||
− | ** Qt5 バージョン: {{ic|g++ $(pkg-config --cflags --libs Qt5Widgets) -o hello hello.cpp}} |
||
− | * 実行: {{ic|./hello}} |
||
{{hc|hello.cpp| |
{{hc|hello.cpp| |
||
#include <QApplication> |
#include <QApplication> |
||
157行目: | 190行目: | ||
==== QML ==== |
==== QML ==== |
||
+ | |||
− | * パッケージ: {{Pkg|qt4}} または {{Pkg|qt5-declarative}} |
||
+ | * パッケージ: {{Pkg|qt5-declarative}}. |
||
− | * ウェブサイト: http://qt-project.org/ |
||
+ | * ウェブサイト: https://doc.qt.io/qt-5/qtquick-qmlscene.html |
||
− | * 実行: {{ic|qmlviewer-qt4 hello.qml}} または {{ic|qmlscene-qt5 hello.qml}} |
||
+ | * 実行コマンド: {{ic|qmlscene hello.qml}} |
||
+ | |||
{{hc|hello.qml| |
{{hc|hello.qml| |
||
− | import QtQuick |
+ | import QtQuick 2.3 |
Rectangle { |
Rectangle { |
||
177行目: | 212行目: | ||
} |
} |
||
}} |
}} |
||
− | {{Note|Qt ツールキットのバージョン 5.x の場合、QtQuick 2.y をインポートする必要があります。}} |
||
==== Python (PyQt) ==== |
==== Python (PyQt) ==== |
||
− | * パッケージ: |
||
− | ** {{Pkg|python-pyqt4}} - Qt 4 の Python 3.x バインディング |
||
− | ** {{Pkg|python2-pyqt4}} - Qt 4 の Python 2.x バインディング |
||
− | ** {{Pkg|python-pyqt5}} - Qt 5 の Python 3.x バインディング |
||
− | ** {{Pkg|python2-pyqt5}} - Qt 5 の Python 2.x バインディング |
||
− | * ウェブサイト: http://www.riverbankcomputing.co.uk/software/pyqt/intro |
||
− | * 実行: {{ic|python hello-pyqt.py}} または {{ic|python2 hello-pyqt.py}} |
||
− | {{hc|hello-pyqt.py|<nowiki> |
||
− | import sys |
||
− | from PyQt4 import QtGui |
||
+ | * パッケージ: {{Pkg|python-pyqt5}} - Python 3 バインディング |
||
− | app = QtGui.QApplication(sys.argv) |
||
+ | * ウェブサイト: https://riverbankcomputing.com/software/pyqt/intro |
||
− | label = QtGui.QLabel("Hello world!") |
||
+ | * 実行コマンド: {{ic|python hello-pyqt.py}}. |
||
− | label.show() |
||
− | sys.exit(app.exec_())</nowiki> |
||
− | }} |
||
− | |||
− | Qt 5.x バージョンの場合、多少変わります: |
||
{{hc|hello-pyqt.py|<nowiki> |
{{hc|hello-pyqt.py|<nowiki> |
||
import sys |
import sys |
||
− | from PyQt5 import |
+ | from PyQt5.QtWidgets import QApplication, QLabel |
− | app = |
+ | app = QApplication(sys.argv) |
− | label = |
+ | label = QLabel("Hello world!") |
label.show() |
label.show() |
||
− | sys.exit(app.exec_()) |
+ | sys.exit(app.exec_()) |
+ | </nowiki>}} |
||
− | }} |
||
− | ==== Python ( |
+ | ==== Python (PySide2) ==== |
+ | |||
− | * パッケージ: |
||
+ | * パッケージ: {{AUR|pyside2}} |
||
− | ** {{Pkg|python-pyside}} - Python 3.x バインディング |
||
+ | * ウェブサイト: https://wiki.qt.io/Qt_for_Python |
||
− | ** {{Pkg|python2-pyside}} - Python 2.x バインディング |
||
− | * |
+ | * 実行コマンド: {{ic|python hello-pyside.py}} |
+ | |||
− | * 実行: {{ic|python hello-pyside.py}} または {{ic|python2 hello-pyside.py}} |
||
− | {{hc|hello- |
+ | {{hc|hello-pyside2.py|<nowiki> |
import sys |
import sys |
||
− | from |
+ | 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!") |
||
label.show() |
label.show() |
||
− | sys.exit(app.exec_()) |
+ | sys.exit(app.exec_()) |
+ | </nowiki>}} |
||
− | }} |
||
==== C# ==== |
==== C# ==== |
||
− | * パッケージ: {{aur-mirror|kdebindings-qyoto}} |
||
− | * ウェブサイト: http://techbase.kde.org/Development/Languages/Qyoto |
||
− | * ビルド: {{ic|mcs -pkg:qyoto hello.cs}} |
||
− | * 実行: {{ic|mono hello.exe}} |
||
− | {{hc|hello.cs| |
||
− | using System; |
||
− | using Qyoto; |
||
+ | [https://gitlab.com/ddobrev/QtSharp QtSharp] を参照。 |
||
− | public class Hello { |
||
− | public static int Main(String[] args) { |
||
− | new QApplication(args); |
||
− | new QLabel("Hello world!").Show(); |
||
+ | == トラブルシューティング == |
||
− | return QApplication.Exec(); |
||
− | } |
||
− | } |
||
− | }} |
||
+ | === Qt の journal ログの動作を無効化/変更する === |
||
− | ==== Ruby ==== |
||
− | * パッケージ: {{aur-mirror|kdebindings-qtruby}} |
||
− | * ウェブサイト: http://rubyforge.org/projects/korundum/ |
||
− | * 実行: {{ic|ruby hello.rb}} |
||
− | {{hc|hello.rb|<nowiki> |
||
− | require 'Qt4' |
||
− | |||
− | app = Qt::Application.new(ARGV) |
||
− | hello = Qt::Label.new('Hello World!') |
||
+ | [[KDE]] などの Qt ベースの[[デスクトップ環境]]を使用すると、[[systemd journal]] に頻繁にデバッグ情報が出力される場合があります。 |
||
− | hello.show |
||
− | app.exec</nowiki> |
||
− | }} |
||
− | ==== Java ==== |
||
− | * パッケージ: {{AUR|qtjambi}} |
||
− | * ウェブサイト: http://qt-jambi.org/ |
||
− | * ビルド: {{ic|javac Hello.java -cp /opt/qtjambi-beta/qtjambi-linux64-community-4.7.0/qtjambi-4.7.0.jar}} |
||
− | * 実行: {{ic|java -cp /opt/qtjambi-beta/qtjambi-linux64-community-4.7.0/qtjambi-4.7.0.jar:. Hello}} |
||
− | {{hc|Hello.java|<nowiki> |
||
− | import com.trolltech.qt.gui.*; |
||
+ | {{ic|QT_LOGGING_RULES}} [[環境変数]]を設定することで、この挙動を変更できます。例えば、ログを完全に無効化するには: |
||
− | public class Hello |
||
− | { |
||
− | public static void main(String args[]) |
||
− | { |
||
− | QApplication.initialize(args); |
||
− | QLabel hello = new QLabel("Hello World!"); |
||
+ | {{hc|/etc/environment|2= |
||
− | hello.show(); |
||
+ | QT_LOGGING_RULES='*=false' |
||
− | QApplication.exec(); |
||
− | } |
||
− | }</nowiki> |
||
}} |
}} |
||
+ | デバッグのログのみを無効化したい場合は、 {{ic|1=QT_LOGGING_RULES="*.debug=false"}} を使用してください。 |
||
− | ==== Perl ==== |
||
− | * パッケージ: {{Pkg|kdebindings-perlqt}} |
||
− | * ウェブサイト: http://code.google.com/p/perlqt4/ |
||
− | * 実行: {{ic|perl hello.pl}} |
||
− | {{hc|hello.pl|<nowiki> |
||
− | use QtGui4; |
||
+ | === アイコンテーマが適用されない === |
||
− | my $a = Qt::Application(\@ARGV); |
||
+ | |||
− | my $hello = Qt::Label("Hello World!", undef); |
||
+ | Qt 5.1 から SVG のサポートは1つのモジュールに移動されました。{{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 アプリケーションを起動]]した場合は設定したテーマが適用されません。以下の方法で解決できます: |
||
+ | |||
+ | * シンボリックリンクを作成する。例: {{bc|# ln -s /home/[username]/.config/Trolltech.conf /etc/xdg/Trolltech.conf}} |
||
+ | * システム全体に適用されるテーマファイルを作成: {{ic|/etc/xdg/Trolltech.conf}}。 |
||
+ | * root でテーマを設定する。 |
||
+ | |||
+ | === Qt 4 スタイルが反映されない === |
||
+ | |||
+ | (KDE ではない) Qt 4 アプリケーションが選択した Qt 4 スタイルを使用しない場合、KDE のスタイル (Oxygen や Phase など) がある場所を Qt 4 に教える必要があります。{{ic|QT_PLUGIN_PATH}} [[環境変数]]を設定する必要があります。例: |
||
+ | |||
+ | QT_PLUGIN_PATH=$HOME/.kde4/lib/kde4/plugins/:/usr/lib/kde4/plugins/ |
||
+ | |||
+ | これで {{ic|qtconfig-qt4}} が KDE のスタイルを見つけられるようになり全てが上手く行くはずです。 |
||
+ | |||
+ | もしくは、Qt 4 の styles ディレクトリから KDE4 の styles ディレクトリにシンボリックリンクを作成します: |
||
+ | |||
+ | # ln -s /usr/lib/{kde,qt}4/plugins/styles/''theme_name'' |
||
+ | |||
+ | === 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 パッケージを再ビルド・インストールしてください。 |
||
+ | |||
+ | === QXcbConnection: XCB error: 2 (BadValue) === |
||
+ | |||
+ | 以下のような内容でファイルを作成してください [https://bugzilla.redhat.com/show_bug.cgi?id=1497564#c6]: |
||
+ | {{hc|/etc/xdg/QtProject/qtlogging.ini|2= |
||
− | $hello->show; |
||
+ | [Rules] |
||
− | exit $a->exec; |
||
+ | qt.qpa.xcb.xcberror=false |
||
− | </nowiki> |
||
}} |
}} |
||
− | ==== Lua ==== |
||
− | * パッケージ: {{AUR|libqtlua}} |
||
− | * ウェブサイト: http://www.nongnu.org/libqtlua/ |
||
− | * 実行: {{ic|qtlua hello.lua}} |
||
− | {{hc|hello.lua|<nowiki> |
||
− | label = qt.new_widget("QLabel") |
||
+ | === グラフィックが整列されない、スケールがおかしい === |
||
− | label:setText("Hello World!") |
||
+ | |||
− | label:show()</nowiki> |
||
+ | [[HiDPI#Qt 5]] を参照。 |
||
+ | |||
+ | === Qt アプリでデッドキーが機能しない === |
||
+ | |||
+ | 適切な[[Xorg でのキーボード設定|キーボード設定]]を行っていて、かつ [[GTK]] アプリ (あるいは他の[[:Category:ウィジェットツールキット|ウィジェット・ツールキット]]) ではデッドキーが機能しているが、[[KDE]] や [[Qt]] アプリでは機能しない場合、[[Xorg]] セッションに適切な構成ファイルが読み込まれていないのかもしれません。 |
||
+ | |||
+ | 確かめる方法は以下の通りです: |
||
+ | |||
+ | # {{ic|qt.xkb.compose.debug}} ログルールを有効化した状態で Qt アプリを起動する。例えば、{{Pkg|qtqr}} を起動するには {{ic|1=QT_LOGGING_RULES=qt.xkb.compose.debug=true qtqr}} |
||
+ | # つぎに、デッドキーを使って文字を入力してみる。例えば、{{ic|ê}} (サーカムフレックス付き小文字のラテン E) を入力するには {{ic|<dead_circumflex> <e>}}。 |
||
+ | # {{ic|qt.xkb.compose: failed to create compose table}} という出力が出た場合、この問題を抱えているのでしょう。 |
||
+ | |||
+ | これを修正するには、まず[[ロケール]]を特定してください。次に、あなたのロケールが {{ic|/usr/share/X11/locale/}} 内に独自のフォルダ (例: {{ic|fr_FR.UTF-8}}) を持っていない場合、{{ic|compose.dir}} マッピングファイルからそれを探し、対応する構成ファイルを見つけてください (例: {{ic|en_US.UTF-8/Compose}}): |
||
+ | |||
+ | {{hc|head=$ grep fr_FR.UTF-8 /usr/share/X11/locale/compose.dir|output= |
||
+ | en_US.UTF-8/Compose fr_FR.UTF-8 |
||
+ | en_US.UTF-8/Compose: fr_FR.UTF-8 |
||
}} |
}} |
||
+ | 次に、{{ic|~/.XCompose}} を作成または編集し、この構成ファイルを追加してください: |
||
− | {{Note|QtLua は Lua だけを使ってアプリケーションを開発するためには作られていません。Lua をスクリプト言語として使って Qt C++ アプリケーションを拡張するために作成されています。}} |
||
+ | {{hc|~/.XCompose|2= |
||
− | == トラブルシューティング == |
||
+ | include "%S/en_US.UTF-8/Compose" |
||
+ | }} |
||
+ | 最後に、[[Qt]] アプリを再起動すれば、デッドキーが機能し、{{ic|1=QT_LOGGING_RULES=qt.xkb.compose.debug=true}} でデバッグしても {{ic|qt.xkb.compose: failed to create compose table}} エラーも出力されないはずです。 |
||
− | === アイコンテーマが適用されない === |
||
+ | === ファイル選択ダイアログが非常に遅く、それと関連するアプリケーションがクラッシュする === |
||
− | Qt 5.1 から SVG のサポートはモジュールに移動されました。{{Pkg|qt5-base}} は {{Pkg|qt5-svg}} を依存パッケージとしていないため、{{Pkg|qt5-base}} がインストールされていても {{Pkg|qt5-svg}} がインストールされていない場合があります。この場合、SVG がサポートされないためにアイコンが何もエラーを出さずにスキップされてしまい、アイコンテーマが使われなくなってしまいます。{{Pkg|qt5-svg}} をインストールすることで問題は解決します。 |
||
+ | {{ic|~/.config/QtProject.conf}} ファイルにはゴミデータが溜まっていき、数百メガバイトにまでなります。これを削除してください。[https://bbs.archlinux.org/viewtopic.php?id=283703][https://www.reddit.com/r/archlinux/comments/11k0jaz/file_dialog_in_qt_applications_like_krita_and/] |
||
− | === Qt4 スタイルが反映されない === |
||
+ | === Wayland で Qt 6.7 がインプットメソッドを無視することがある === |
||
− | (KDE ではない) Qt4 アプリケーションが選択した Qt4 スタイルを使用しない場合、KDE のスタイル (Oxygen や Phase など) がある場所を Qt4 に教える必要があります。{{ic|/etc/profile}} (root 権限がない場合は {{ic|~/.profile}}) に以下を記述して {{ic|QT_PLUGIN_PATH}} 環境変数を設定してください: |
||
+ | Qt は Wayland プラットフォーム向けに text-input-v3 を導入しました。しかし、この実装は完璧ではなく、インプットメソッドの使用を妨げてしまう問題を引き起こすことがあります。 |
||
− | export QT_PLUGIN_PATH=$HOME/.kde4/lib/kde4/plugins/:/usr/lib/kde4/plugins/ |
||
+ | 使用している Wayland コンポジタが text-input-v2 プロトコルに対応している場合は、以下の環境変数をグローバルに設定してください: |
||
− | これで {{ic|qtconfig-qt4}} が KDE のスタイルを見つけられるようになり全てが上手く行くはずです。 |
||
+ | {{hc|/etc/environment|2= |
||
− | もしくは、Qt4 の styles ディレクトリから KDE4 の styles ディレクトリにシンボリックリンクを作成します: |
||
+ | QT_WAYLAND_TEXT_INPUT_PROTOCOL=zwp_text_input_v2}} |
||
− | # ln -s /usr/lib/{kde,qt}4/plugins/styles/[theme name] |
||
== 参照 == |
== 参照 == |
||
+ | |||
− | * [http://qt.io/ 公式ウェブサイト] |
||
− | * [ |
+ | * [https://qt.io/ 公式ウェブサイト] |
− | * [ |
+ | * [https://doc.qt.io Qt ドキュメント] |
+ | * [https://planet.qt.io Planet Qt] |
||
− | * [http://qt-apps.org/ Qt アプリケーション] |
||
+ | |||
+ | {{TranslationStatus|Qt|2024-05-05|806924}} |
2024年5月8日 (水) 13:23時点における最新版
Qt はクロスプラットフォームのアプリケーション・ウィジェットツールキットです。標準の C++ を使っていますが言語機能を強化するために特別なコードジェネレータ (Meta Object Compiler、またの名を moc) とマクロをフルに活用しています。主な特徴として:
- 主要なデスクトッププラットフォームと一部のモバイルプラットフォームで動作します。
- 幅広い国際化サポート。
- SQL データベースのアクセス、XML のパース、スレッド管理、ネットワークのサポートを提供するライブラリと、ファイルを処理するための統一されたクロスプラットフォームのアプリケーションプログラミングインタフェース (API)。
Qt フレームワークは主要な開発プラットフォームの一つとして、KDE ソフトウェアコミュニティや VLC、VirtualBox、Mathematica など重要なオープンソース・プロプライエタリなアプリケーションで使われています。
目次
- 1 インストール
- 2 デフォルトの Qt ツールキット
- 3 設定
- 4 開発
- 5 トラブルシューティング
- 5.1 Qt の journal ログの動作を無効化/変更する
- 5.2 アイコンテーマが適用されない
- 5.3 root アプリケーションにテーマが適用されない
- 5.4 Qt 4 スタイルが反映されない
- 5.5 Qt 5 のアップデート後に Qt 5 ベースの全アプリケーションが実行できなくなる
- 5.6 QXcbConnection: XCB error: 2 (BadValue)
- 5.7 グラフィックが整列されない、スケールがおかしい
- 5.8 Qt アプリでデッドキーが機能しない
- 5.9 ファイル選択ダイアログが非常に遅く、それと関連するアプリケーションがクラッシュする
- 5.10 Wayland で Qt 6.7 がインプットメソッドを無視することがある
- 6 参照
インストール
Qt 6.x および 5.x は公式リポジトリから入手できます。Qt のレガシーバージョン(4.x および 3.x) は AURから入手できます。以下のパッケージでインストールできます:
- Qt 6.x は qt6-base パッケージでインストールできます。ドキュメントは qt6-doc パッケージに入っています。
- Qt 5.x は qt5-base パッケージでインストールできます。ドキュメントは qt5-doc パッケージに入っています。
- Qt 4.x は qt4AUR パッケージでインストールできます。ドキュメントは qt4-docAUR パッケージに入っています。
- Qt 3.x は qt3AUR パッケージでインストールできます。ドキュメントのパッケージはありません。
デフォルトの Qt ツールキット
qtchooserAUR[リンク切れ: package not found] をインストールすることで、/usr/bin
内の Qt のバイナリ (例: qmake) を、それの古いバージョン (例: qmake-qt4 や qmake-qt3) を指すように変更できます (デフォルトでは Qt 5 のバージョン (例: qmake-qt5) を指しています)。
環境変数を使う
QT_SELECT
環境変数を使用して、デフォルトの Qt ツールキットを定義することができます。例えば、Qt n を使う場合、QT_SELECT=n
を設定します。
設定ファイルを使う
/etc/xdg/qtchooser/
ディレクトリ内の .conf ファイルを指すシンボリックリンク ~/.config/qtchooser/default.conf
を作成することで、デフォルトの Qt ツールキットを設定できます。例えば、Qt 4 に設定するには、/etc/xdg/qtchooser/4.conf
を指すシンボリックリンク ~/.config/qtchooser/default.conf
を作成します:
$ ln -s/etc/xdg/qtchooser/4.conf
~/.config/qtchooser/default.conf
設定
Qt 5 のスタイル
Qt5 は使われているデスクトップ環境によって使用するスタイルを決定します:
- KDE Plasma では、実際に選択されている Qt スタイルが使われます。KDE 5 System Settings (systemsettings) を使うことで設定できます。設定項目は Appearance > Application Style > Widget Style にあります。
- Cinnamon、GNOME、MATE、LXDE、Xfce では GTK が使われます (QGtkStyle)。
- 他のデスクトップ環境では、Fusion が使われます。
特定のスタイルを強制するには、QT_STYLE_OVERRIDE
環境変数を設定してください。特に、GTK のテーマを使いたい場合は gtk2
に設定してください (注: GTK のスタイルを使うには、以下で説明されている Qt スタイルプラグインのインストールが必要です)。Qt 5 アプリケーションは -style
フラグもサポートしており、特定のスタイルを使って Qt 5 アプリケーションを起動することができます。
Qt 5 には次のスタイルが含まれています: Fusion、Windows。他のスタイルは別途インストールできます:
- Breeze — Plasma Desktop 用の Breeze ビジュアルスタイルのアートワーク、スタイル、アセット。
- Oxygen — KDE Oxygen スタイル。
- Lightly — Lightly は、視覚的にモダンでミニマルであることを目指す、breeze テーマのフォークです。
- https://github.com/Luwx/Lightly || lightly-gitAUR[リンク切れ: package not found]
- QtCurve — KDE と GTK のウィジェットスタイルの設定セット。
- https://invent.kde.org/system/qtcurve || qtcurve-qt5[リンク切れ: package not found]
- Adwaita-Qt — Qt アプリケーションを GNOME Shell に調和させるスタイル。
- Qt style plugins — GTK、Cleanlooks、Motif、Plastique などの Qt5 の追加スタイルプラグイン。
- Kvantum — Adapta、Arc、Ambiance などの人気な GTK テーマと同じ見た目のスタイルが含まれている、マスタマイズ可能な SVG ベースのテーマエンジン。
Qt 4 のスタイル
Qt 4 のアプリケーションは動作しているデスクトップ環境の挙動を模倣しようとします、ただし、なにか問題が発生したり、設定がハードコードされている場合は別です。
- KDE Plasma では、実際に選択されている Qt スタイルが使われます。KDE システム設定 (systemsettings) を使って設定することができます。設定項目は Appearance > Application Style > Widget Style にあります。
- Cinnamon、GNOME、Xfce では GTK が使われます (QGtkStyle)。
- 他のデスクトップ環境では、Windows が使われます。
Qt4 アプリケーションのルックアンドフィールを変更したい場合は、(qt4AUR パッケージに含まれている) Qt 設定 (qtconfig-qt4) ツールが使えます。QtConfig を使うことで Qt 4 アプリケーションの外観をとてもシンプルに設定することができ、現在の Qt のスタイル・色・フォントなど高度なオプションまで簡単にアクセスすることが可能です。
Qt は設定情報を全て /etc/xdg/Trolltech.conf
(システム全体) や ~/.config/Trolltech.conf
(ユーザー個別) に保存しています。このファイルには外観と関係ない情報が多く含まれているため見づらいですが、変更をファイルの最後に加えれば前の値を上書きできます (変更は [Qt] ヘッダーの下に追加してください)。
例えば、テーマを QtCurve に変更するには、以下を追加します:
~/.config/Trolltech.conf
... [Qt] style=QtCurve
Qt 4 には次のスタイルが含まれています: CDE、Cleanlooks、GTK、Motif、Plastique、Windows。他のスタイルは別途インストールできます:
- Adwaita-Qt — Qt アプリケーションを GNOME Shell に調和させるスタイル。
Qt スタイルシート
Qt アプリケーションのルックアンドフィールをカスタマイズするのにスタイルシート、シンプルな CSS ファイルを使うこともできます。スタイルシートを使えば、アプリケーションの全てのウィジェットの外観を修正できます。
他のスタイルを使ってアプリケーションを実行するには、次のように実行してください:
$ qt_application -stylesheet style.qss
Qt スタイルシートの詳細は 公式ドキュメント や他のチュートリアル を見て下さい。スタイルシートの例はこの Dolphin の変更を見て下さい。
GTK と Qt
GTK と Qt のアプリケーションを使っているならば、それらの見た目が上手く調和しないことに気づくでしょう。GTK スタイルと Qt スタイルを調和させたい場合は Qt と GTK アプリケーションの外観の統合 を読んで下さい。
KDE Plasma 以外の環境での Qt 5/6 アプリケーションの設定
Qt 4 と違って、Qt 5 にはフォントやアイコン、スタイルを設定するための qtconfig ユーティリティが含まれていません。代わりに、Qt 5 は、実行中のデスクトップ環境の設定の使用を試みます。KDE Plasma や GNOME では問題なく設定が適用されますが、他のマイナーなデスクトップ環境やウィンドウマネージャを使っている場合、Qt 5 アプリケーションでアイコンが表示されなくなることがあります。環境変数で XDG_CURRENT_DESKTOP=KDE
や XDG_CURRENT_DESKTOP=GNOME
と設定して使っているデスクトップ環境を偽装し、適切なアプリケーションを使ってアイコンセットを設定することで解決できます。
もしくは、デスクトップ環境に依存しない Qt 5 QPA の設定ユーティリティが含まれている qt5ct/qt6ct パッケージを使う方法もあります。パッケージをインストールしたら、qt5ct
/qt6ct
を実行してアイコンテーマを設定し、QT_QPA_PLATFORMTHEME=qt5ct:qt6ct
環境変数を設定して下さい。それで Qt アプリケーションに設定が反映されます。もしくは Qt 5 アプリケーションの引数として --platformtheme qt5ct
を指定してください。
qt5ct-kdeAUR は、(KDE QML アプリケーションを含む) KDE アプリケーションとのより良い統合が可能な、パッチ適用済みの qt5ct を提供します。
以下のエラーが表示され、一部のアプリで一部のアイコンが表示されない場合、oxygen と oxygen-icons をインストールしてください:
Icon theme "oxygen" not found. Icon theme "oxygen" not found. Error: standard icon theme "oxygen" not found!
開発
サポートされているプラットフォーム
Qt は、一部の時代遅れなプラットフォームを含めて、今日存在するほとんどのプラットフォームをサポートしており、時々移植が増えることもあります。完全なリストは Qt の Wikipedia の記事を見て下さい。
Android
まず、AUR か Android Studio を使って、Android SDK と NDK を入手する必要があります。
SDK は OpenJDK も必要とします。Qt バージョンごとに異なるバージョン要件が存在します。詳細はこのページを確認してください。
次に、Android 用の Qt 5 を入手する必要があります。以下で説明されているように AUR からインストールすることもできますし、自分でビルドすることもできます。Qt wiki ページでビルド手順を見ることができます。
問題が発生した場合は、既知の問題を確認すると良いでしょう。
- android-armv7a-eabi-qt5AUR - armeabi-v7a
- android-aarch64-qt5AUR - aarch64
- android-x86-qt5AUR - x86
- android-x86-64-qt5AUR - x86_64
もしくは、公式の Qt インストーラを使うこともできます。
ツール
以下は公式の Qt ツールです:
- Qt Creator — Qt のために作られたクロスプラットフォームの IDE で、全ての機能をサポート。
- 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 アプリケーションを素早くデザインしてゼロからコンポーネントを作ることができます。
- 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 には人気な言語のすべてに対してバインディングが存在します。完全なリストは https://wiki.qt.io/Language_Bindings を参照してください。
以下では 'Hello world!' というメッセージを小さなウィンドウで表示するサンプルを示しています。
C++
- パッケージ: qt5-base
- ウェブサイト: https://www.qt.io/developers/
- ビルド:
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
- パッケージ: qt5-declarative.
- ウェブサイト: https://doc.qt.io/qt-5/qtquick-qmlscene.html
- 実行コマンド:
qmlscene hello.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 } }
Python (PyQt)
- パッケージ: python-pyqt5 - Python 3 バインディング
- ウェブサイト: https://riverbankcomputing.com/software/pyqt/intro
- 実行コマンド:
python hello-pyqt.py
.
hello-pyqt.py
import sys from PyQt5.QtWidgets import QApplication, QLabel app = QApplication(sys.argv) label = QLabel("Hello world!") label.show() sys.exit(app.exec_())
Python (PySide2)
- パッケージ: pyside2AUR
- ウェブサイト: https://wiki.qt.io/Qt_for_Python
- 実行コマンド:
python hello-pyside.py
hello-pyside2.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 を参照。
トラブルシューティング
Qt の journal ログの動作を無効化/変更する
KDE などの Qt ベースのデスクトップ環境を使用すると、systemd journal に頻繁にデバッグ情報が出力される場合があります。
QT_LOGGING_RULES
環境変数を設定することで、この挙動を変更できます。例えば、ログを完全に無効化するには:
/etc/environment
QT_LOGGING_RULES='*=false'
デバッグのログのみを無効化したい場合は、 QT_LOGGING_RULES="*.debug=false"
を使用してください。
アイコンテーマが適用されない
Qt 5.1 から SVG のサポートは1つのモジュールに移動されました。qt5-base は qt5-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 でテーマを設定する。
Qt 4 スタイルが反映されない
(KDE ではない) Qt 4 アプリケーションが選択した Qt 4 スタイルを使用しない場合、KDE のスタイル (Oxygen や Phase など) がある場所を Qt 4 に教える必要があります。QT_PLUGIN_PATH
環境変数を設定する必要があります。例:
QT_PLUGIN_PATH=$HOME/.kde4/lib/kde4/plugins/:/usr/lib/kde4/plugins/
これで qtconfig-qt4
が KDE のスタイルを見つけられるようになり全てが上手く行くはずです。
もしくは、Qt 4 の styles ディレクトリから KDE4 の styles ディレクトリにシンボリックリンクを作成します:
# ln -s /usr/lib/{kde,qt}4/plugins/styles/theme_name
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_OVERRIDE
と QT_QPA_PLATFORMTHEME
環境変数をチェックして使用しているテーマ・スタイルを確認し、テーマやスタイルの AUR パッケージを再ビルド・インストールしてください。
QXcbConnection: XCB error: 2 (BadValue)
以下のような内容でファイルを作成してください [1]:
/etc/xdg/QtProject/qtlogging.ini
[Rules] qt.qpa.xcb.xcberror=false
グラフィックが整列されない、スケールがおかしい
HiDPI#Qt 5 を参照。
Qt アプリでデッドキーが機能しない
適切なキーボード設定を行っていて、かつ GTK アプリ (あるいは他のウィジェット・ツールキット) ではデッドキーが機能しているが、KDE や Qt アプリでは機能しない場合、Xorg セッションに適切な構成ファイルが読み込まれていないのかもしれません。
確かめる方法は以下の通りです:
qt.xkb.compose.debug
ログルールを有効化した状態で Qt アプリを起動する。例えば、qtqr を起動するにはQT_LOGGING_RULES=qt.xkb.compose.debug=true qtqr
- つぎに、デッドキーを使って文字を入力してみる。例えば、
ê
(サーカムフレックス付き小文字のラテン E) を入力するには<dead_circumflex> <e>
。 qt.xkb.compose: failed to create compose table
という出力が出た場合、この問題を抱えているのでしょう。
これを修正するには、まずロケールを特定してください。次に、あなたのロケールが /usr/share/X11/locale/
内に独自のフォルダ (例: fr_FR.UTF-8
) を持っていない場合、compose.dir
マッピングファイルからそれを探し、対応する構成ファイルを見つけてください (例: en_US.UTF-8/Compose
):
$ grep fr_FR.UTF-8 /usr/share/X11/locale/compose.dir
en_US.UTF-8/Compose fr_FR.UTF-8 en_US.UTF-8/Compose: fr_FR.UTF-8
次に、~/.XCompose
を作成または編集し、この構成ファイルを追加してください:
~/.XCompose
include "%S/en_US.UTF-8/Compose"
最後に、Qt アプリを再起動すれば、デッドキーが機能し、QT_LOGGING_RULES=qt.xkb.compose.debug=true
でデバッグしても qt.xkb.compose: failed to create compose table
エラーも出力されないはずです。
ファイル選択ダイアログが非常に遅く、それと関連するアプリケーションがクラッシュする
~/.config/QtProject.conf
ファイルにはゴミデータが溜まっていき、数百メガバイトにまでなります。これを削除してください。[2][3]
Wayland で Qt 6.7 がインプットメソッドを無視することがある
Qt は Wayland プラットフォーム向けに text-input-v3 を導入しました。しかし、この実装は完璧ではなく、インプットメソッドの使用を妨げてしまう問題を引き起こすことがあります。
使用している Wayland コンポジタが text-input-v2 プロトコルに対応している場合は、以下の環境変数をグローバルに設定してください:
/etc/environment
QT_WAYLAND_TEXT_INPUT_PROTOCOL=zwp_text_input_v2