Qt

提供: ArchWiki
2023年2月22日 (水) 19:02時点におけるAshMyzk (トーク | 投稿記録)による版 (→‎トラブルシューティング: 同期)
ナビゲーションに移動 検索に移動

関連記事

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

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

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

インストール

Qt 6.x および 5.x は公式リポジトリから入手できます。Qt のレガシーバージョン(4.x および 3.x) は AURから入手できます。以下のパッケージでインストールできます:

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

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

qtchooserAUR をインストールすることで、/usr/bin 内の Qt のバイナリ (例: qmake) を、それの古いバージョン (例: qmake-qt4qmake-qt3) を指すように変更できます (デフォルトでは Qt 5 のバージョン (例: qmake-qt5) を指しています)。

ノート: 現在、qtchooserAURqt5-base と衝突しています。これを本当に必要としているならば、/usr/local にインストールすることができます。しかし、公式にはもはやサポートされていません。FS#51308 を参照してください。

環境変数を使う

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

設定

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 には次のスタイルが含まれています: FusionWindows。他のスタイルは別途インストールできます:

  • Breeze — Plasma Desktop 用の Breeze ビジュアルスタイルのアートワーク、スタイル、アセット。
https://invent.kde.org/plasma/breeze || breeze
  • Oxygen — KDE Oxygen スタイル。
https://invent.kde.org/plasma/oxygen || oxygen
  • Lightly — Lightly は、視覚的にモダンでミニマルであることを目指す、breeze テーマのフォークです。
https://github.com/Luwx/Lightly || lightly-gitAUR
  • QtCurve — KDE と GTK のウィジェットスタイルの設定セット。
https://invent.kde.org/system/qtcurve || qtcurve-qt5
  • Adwaita-Qt — Qt アプリケーションを GNOME Shell に調和させるスタイル。
https://github.com/MartinBriza/adwaita-qt || adwaita-qt5
  • Qt style pluginsGTKCleanlooksMotifPlastique などの Qt5 の追加スタイルプラグイン。
https://code.qt.io/cgit/qt/qtstyleplugins.git || qt5-stylepluginsAUR
  • KvantumAdaptaArcAmbiance などの人気な GTK テーマと同じ見た目のスタイルが含まれている、マスタマイズ可能な SVG ベースのテーマエンジン。
https://github.com/tsujan/Kvantum/tree/master/Kvantum || kvantum

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 のスタイル・色・フォントなど高度なオプションまで簡単にアクセスすることが可能です。

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

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

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

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

Qt 4 には次のスタイルが含まれています: CDECleanlooksGTKMotifPlastiqueWindows。他のスタイルは別途インストールできます:

  • Breeze — Plasma Desktop 用の Breeze ビジュアルスタイルのアートワーク、スタイル、アセット。
https://invent.kde.org/plasma/breeze || breeze-kde4AUR
  • Adwaita-Qt — Qt アプリケーションを GNOME Shell に調和させるスタイル。
https://github.com/MartinBriza/adwaita-qt || adwaita-qt4AUR

Qt スタイルシート

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

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

$ qt_application -stylesheet style.qss

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

GTK と Qt

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

KDE Plasma 以外の環境での Qt 5 アプリケーションの設定

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

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

qt5ct-kdeAUR は、(KDE QML アプリケーションを含む) KDE アプリケーションとのより良い統合が可能な、パッチ適用済みの qt5ct を提供します。

以下のエラーが表示され、一部のアプリで一部のアイコンが表示されない場合、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-ndkAUR をインストールするか、Android Studio を使用してください。

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

もしくは公式サイトの Qt Installer を利用することもできます。

詳細は公式サイトの Getting Started with Qt for Android にあります。

ツール

以下は公式の 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

バインディング

完全なリストはここを見て下さい。

以下では '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
    }
}

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 を参照してください。

トラブルシューティング

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-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 でテーマを設定する。

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_OVERRIDEQT_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 アプリ (あるいは他のウィジェット・ツールキット) ではデッドキーが機能しているが、KDEQt アプリでは機能しない場合、Xorg セッションに適切な構成ファイルが読み込まれていないのかもしれません。

確かめる方法は以下の通りです:

  1. qt.xkb.compose.debug ログルールを有効化した状態で Qt アプリを起動する。例えば、qtqr を起動するには QT_LOGGING_RULES=qt.xkb.compose.debug=true qtqr
  2. つぎに、デッドキーを使って文字を入力してみる。例えば、ê (サーカムフレックス付き小文字のラテン E) を入力するには <dead_circumflex> <e>
  3. 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 エラーも出力されないはずです。

参照