「Qt」の版間の差分
細 (→インストール: 修正) |
(→デフォルトの Qt ツールキット: 同期) |
||
27行目: | 27行目: | ||
== デフォルトの Qt ツールキット == |
== デフォルトの Qt ツールキット == |
||
+ | {{AUR|qtchooser}} をインストールすることで、{{ic|/usr/bin}} 内の Qt のバイナリ (例: ''qmake'') を、それの古いバージョン (例: ''qmake-qt4'' や ''qmake-qt3'') を指すように変更できます (デフォルトでは Qt 5 のバージョン (例: ''qmake-qt5'') を指しています)。 |
||
− | Qt のパッケージ {{Pkg|qt5-base}} は {{ic|/usr/bin}} にバイナリ (例: ''qmake'') および {{ic|-qt5}} のシンボリックリンクを提供します。Qt 4 以前がインストールされていない場合、特別な設定は必要ありません。 |
||
+ | {{Note|現在、{{AUR|qtchooser}} は {{Pkg|qt5-base}} と衝突しています。これを本当に必要としているならば、{{ic|/usr/local}} にインストールすることができます。しかし、公式にはもはやサポートされていません。{{Bug|51308}} を参照してください。}} |
||
− | 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]。}} |
||
=== 環境変数を使う === |
=== 環境変数を使う === |
||
+ | |||
− | デフォルトの Qt ツールキットを定義するには、{{ic|QT_SELECT}} [[環境変数]]を作成します。例えば、Qt4 に設定するには、シェルの初期化ファイル ({{ic|~/.bash_profile}} や {{ic|~/.zprofile}} など) で {{ic|1=export QT_SELECT=4}} を実行してください。 |
||
+ | {{ic|QT_SELECT}} [[環境変数]]を使用して、デフォルトの Qt ツールキットを定義することができます。例えば、Qt 4 を使う場合、{{ic|1=QT_SELECT=4}} を設定します。 |
||
=== 設定ファイルを使う === |
=== 設定ファイルを使う === |
||
+ | |||
− | {{ic|/etc/xdg/qtchooser/}} ディレクトリの ''.conf'' ファイルに {{ic|~/.config/qtchooser/default.conf}} からシンボリックリンクを張ればデフォルトの Qt ツールキットを設定できます。例えば、Qt4 に設定するには {{ic|/etc/xdg/qtchooser/4.conf}} から {{ic|~/.config/qtchooser/default.conf}} にリンクするシンボリックリンクを作成します: |
||
+ | {{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}} |
||
2023年2月22日 (水) 11:58時点における版
Qt はクロスプラットフォームのアプリケーション・ウィジェットツールキットです。標準の C++ を使っていますが言語機能を強化するために特別なコードジェネレータ (Meta Object Compiler、またの名を moc) とマクロをフルに活用しています。主な特徴として:
- 主要なデスクトッププラットフォームと一部のモバイルプラットフォームで動作します。
- 幅広い国際化サポート。
- SQL データベースのアクセス、XML のパース、スレッド管理、ネットワークのサポートを提供するライブラリと、ファイルを処理するための統一されたクロスプラットフォームのアプリケーションプログラミングインタフェース (API)。
Qt フレームワークは主要な開発プラットフォームの一つとして、KDE ソフトウェアコミュニティや VLC、VirtualBox、Mathematica など重要なオープンソース・プロプライエタリなアプリケーションで使われています。
インストール
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 パッケージでインストールできます。ドキュメントは qt3-docAUR パッケージに入っています。
デフォルトの Qt ツールキット
qtchooserAUR をインストールすることで、/usr/bin
内の Qt のバイナリ (例: qmake) を、それの古いバージョン (例: qmake-qt4 や qmake-qt3) を指すように変更できます (デフォルトでは Qt 5 のバージョン (例: qmake-qt5) を指しています)。
環境変数を使う
QT_SELECT
環境変数を使用して、デフォルトの Qt ツールキットを定義することができます。例えば、Qt 4 を使う場合、QT_SELECT=4
を設定します。
設定ファイルを使う
/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
外観
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 のスタイル・色・フォントなど高度なオプションまで簡単にアクセスすることが可能です。
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 ビジュアルスタイルのアートワーク、スタイル、アセット。
- Adwaita-Qt — Qt アプリケーションを GNOME Shell に調和させるスタイル。
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 ビジュアルスタイルのアートワーク、スタイル、アセット。
- Oxygen — KDE Oxygen スタイル。
- QtCurve — KDE と GTK のウィジェットスタイルの設定セット。
- Adwaita-Qt — Qt アプリケーションを GNOME Shell に調和させるスタイル。
- Qt スタイルプラグイン — GTK+, Cleanlooks, Motif, Plastique などの Qt5 の追加スタイルプラグイン。
- Kvantum — Adapta, Arc, Ambiance などの GTK テーマと同じ見た目のスタイルが含まれている、SVG ベースのテーマエンジン。
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=KDE
や XDG_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 では上記の設定は機能しません。
以下のエラーが表示された場合、あるいはアプリの中のアイコンが表示されない場合、oxygen と oxygen-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-ndkAUR をインストールするか、Android Studio を使用してください。
それから 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 Installer を利用することもできます。
詳細は公式サイトの Getting Started with Qt for Android にあります。
ツール
以下は公式の 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
バインディング
完全なリストはここを見て下さい。
以下では 'Hello world!' というメッセージを小さなウィンドウで表示するサンプルを示しています。
C++
- パッケージ:
- ウェブサイト: 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
- Qt4 バージョン:
- 実行:
./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
- パッケージ: qt4AUR または qt5-declarative
- ウェブサイト: https://doc.qt.io/qt-5/qtquick-qmlscene.html
- 実行:
qmlviewer-qt4 hello.qml
または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-pyqt4AUR - Qt 4 の Python 3.x バインディング
- python2-pyqt4AUR - Qt 4 の Python 2.x バインディング
- python-pyqt5 - Qt 5 の Python 3.x バインディング
- python2-pyqt5[リンク切れ: パッケージが存在しません] - Qt 5 の Python 2.x バインディング
- ウェブサイト: https://riverbankcomputing.com/software/pyqt/intro
- 実行:
python hello-pyqt.py
またはpython2 hello-pyqt.py
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)
- パッケージ:
- pyside2 - Python 3.x バインディング
- python2-pysideAUR - Python 2.x バインディング
- ウェブサイト: https://wiki.qt.io/Qt_for_Python
- 実行:
python hello-pyside.py
またはpython2 hello-pyside.py
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 を参照してください。
トラブルシューティング
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-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 でテーマを設定する。
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 に依存するアプリケーション (例: SDDM や KDE のプログラム) が /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_OVERRIDE
と QT_QPA_PLATFORMTHEME
環境変数をチェックして使用しているテーマ・スタイルを確認し、テーマやスタイルの AUR パッケージを再ビルド・インストールしてください。