Qt

提供: ArchWiki
移動先: 案内検索

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.xqt4 パッケージでインストールできます。ドキュメントは qt4-docAUR パッケージに入っています。
  • Qt 3.xqt3AUR パッケージでインストールできます。ドキュメントは qt3-docAUR パッケージに入っています。

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

Qt のパッケージは /usr/bin にバイナリ (例: qmake) を提供しません。代わりに -qt5, -qt4, -qt3 のシンボリックリンクが提供されます (例: qmake-qt5, qmake-qt4, qmake-qt3)。このため Qt3/4 のアプリケーションではコンパイルが失敗するかもしれません。

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

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

環境変数を使う

デフォルトの Qt ツールキットを定義するには、QT_SELECT 環境変数を作成します。例えば、Qt4 に設定するには、シェルの初期化ファイル (~/.bash_profile~/.zsh_profile など) で 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 アプリケーションのルックアンドフィールを変更したい場合は、(qt4 パッケージに含まれている) 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://projects.kde.org/projects/kde/workspace/breeze || breeze-kde4
  • Oxygen — KDE Oxygen スタイル。
https://projects.kde.org/projects/kde/workspace/oxygen || oxygen-kde4
  • QtCurve — KDE と GTK のウィジェットスタイルの設定セット。
https://projects.kde.org/projects/playground/base/qtcurve || qtcurve-qt4
  • 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://projects.kde.org/projects/kde/workspace/breeze || breeze
  • Oxygen — KDE Oxygen スタイル。
https://projects.kde.org/projects/kde/workspace/oxygen || oxygen
  • QtCurve — KDE と GTK のウィジェットスタイルの設定セット。
https://projects.kde.org/projects/playground/base/qtcurve || 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-stylepluginsAUR

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

Qt for Android installer を使って下さい。

ツール

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

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

バインディング

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

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

C++

  • パッケージ:
    • qt4 - Qt ツールキットのバージョン 4.x。
    • qt5-base - Qt ツールキットのバージョン 5.x。
  • ウェブサイト: http://qt-project.org/
  • ビルド:
    • 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 1.0

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 PySide.QtCore import *
from PySide.QtGui import *
 
app = QApplication(sys.argv)
label = QLabel("Hello world!")

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

C#

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

Java

  • パッケージ: qtjambiAUR
  • ウェブサイト: http://qt-jambi.org/
  • ビルド: javac Hello.java -cp /opt/qtjambi-beta/qtjambi-linux64-community-4.7.0/qtjambi-4.7.0.jar
  • 実行: java -cp /opt/qtjambi-beta/qtjambi-linux64-community-4.7.0/qtjambi-4.7.0.jar:. Hello
Hello.java
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();
    }
}

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++ アプリケーションを拡張するために作成されています。

トラブルシューティング

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

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]

参照