Qt
Qt はクロスプラットフォームのアプリケーション・ウィジェットツールキットです。標準の C++ を使っていますが言語機能を強化するために特別なコードジェネレータ (Meta Object Compiler もしくは moc) とマクロをフルに活用しています。主な特徴として:
- 主要なデスクトッププラットフォームと複数のモバイルプラットフォームで動作します。
- 完全な国際化サポート。
- SQL データベースのアクセス、XML のパース、スレッド管理、ネットワークのサポートを提供するライブラリと、ファイルを処理するための統一されたクロスプラットフォームのアプリケーションプログラミングインタフェース (API)。
Qt フレームワークは主要な開発プラットフォームの一つとして、KDE ソフトウェアコミュニティや VLC, VirtualBox, Opera, Mathematica, Skype などオープンソース・プロプライエタリ問わず様々なアプリケーションで使われています。
目次
インストール
現在公式リポジトリでは3つのバージョンの Qt が利用可能です。以下のパッケージでインストールできます:
- Qt 5.x は qt5-base パッケージでインストールできます。ドキュメントは qt5-doc パッケージに入っています。
- Qt 4.x は qt4 パッケージでインストールできます。ドキュメントは qt4-docAUR パッケージに入っています。
- Qt 3.x は qt3AUR パッケージでインストールできます。ドキュメントは qt3-docAUR パッケージに入っています。
デフォルトの Qt ツールキット
qtchooser をインストールすることで /usr/bin に在来のバイナリ (例: qmake) を復活させて使用する Qt ツールキットを設定できます。デフォルトでは Qt5 が使われます。
環境変数を使う
例えば、Qt4 に設定するには ~/.{bash,zsh}_profile
で QT_SELECT=4
を export してください。
設定ファイルを使う
例えば、Qt4 に設定するには /etc/xdg/qtchooser/4.conf
から ~/.config/qtchooser/default.conf
にシンボリックリンクを張って下さい。
外観
設定
Qt のアプリケーションは動作しているデスクトップ環境の挙動を模倣しようとします、ただし、なにか問題が発生したり、設定がハードコードされている場合は別です。Qt アプリケーションのルックアンドフィールを変更したい場合は、Qt 設定 (qtconfig-qt4
もしくは qt3config
) ツールが使えます。QtConfig を使うことで Qt アプリケーションの外観をとてもシンプルに設定することができ、現在の Qt のスタイル・色・フォントなど高度なオプションまで簡単にアクセスすることが可能です。Qt5 では QtConfig は削除されました。Qt5 で特定のスタイルを使うようにしたいときは、QT_STYLE_OVERRIDE
環境変数を使いたいスタイルに設定してください (例: gtk
)。
Qt の中には含まれていませんが、KDE システム設定も Qt アプリケーションの多くのカスタマイズオプションを設定することができます。
テーマ
GTK+ スタイル、Windows スタイル、CDE スタイルなど Qt には始めから複数のスタイルが含まれていますが、公式リポジトリや AUR からさらに多くのスタイルをインストールできます (ほとんどは KDE デスクトップ用のテーマです):
- Oxygen — KDE デスクトップのデスクトップテーマ。
- QtCurve — GTK+ と Qt アプリケーションをサポートしている人気のデスクトップテーマ、細かい設定が可能。
- Skulpture — KDE と Qt プログラムの GUI スタイルアドオン。ビジュアルエクスペリエンスを向上させる影とグラデーションによるクラシカルで立体的なアートワークが特徴。
- Polymer — KDE Plastik Style の Qt3 移植。
- Bespin — 細かくカスタマイズできる KDE テーマ。
フォント
Qt のフォントは QtConfig から フォント > デフォルトのフォント で設定できます。
アイコン
QtConfig からアイコンテーマを設定する方法はありませんが、Qt は Freedesktop.org Icon Specification に従っているので、X 用に設定したテーマセットは Qt でも使われます。
手動設定
Qt は設定情報を全て ~/.config/Trolltech.conf
に保存しています。このファイルには外観と関係ない情報が多く含まれているため見づらいですが、変更をファイルの最後に加えれば前の値を上書きできます (変更は [Qt]
ヘッダーの下に追加してください)。
例えば、テーマを QtCurve に変更するには、以下を追加します:
~/.config/Trolltech.conf
... [Qt] style=QtCurve
Qt スタイルシート
Qt アプリケーションのルックアンドフィールをカスタマイズするのにスタイルシート、シンプルな CSS ファイルを使うこともできます。スタイルシートを使えば、アプリケーションの全てのウィジェットの外観を修正できます。
他のスタイルを使ってアプリケーションを実行するには、次のように実行してください:
$ qt_application --stylesheet style.qss
Qt スタイルシートの詳細は 公式ドキュメント や チュートリアル を見て下さい。スタイルシートの例は Dolphin modification を見て下さい。
GTK+ と Qt
GTK+ と Qt のアプリケーションを使っているならば、それらの見た目が上手く調和しないことに気づくでしょう。GTK+ スタイルと Qt スタイルを調和させたい場合は Uniform Look for Qt and GTK Applications を読んで下さい。
開発
サポートされているプラットフォーム
Qt はマイナーなプラットフォームを含めて、今日存在するほとんどのプラットフォームをサポートしており、時々移植が増えることもあります。完全なリストは Qt の Wikipedia の記事を見て下さい。
ツール
以下は公式の Qt ツールです:
- Qt Creator — Qt のために作られたクロスプラットフォームの IDE で全ての機能をサポート。
- Qt Linguist — Qt アプリケーションの翻訳や国際化を素早く行うためのツールのセット。
- Qt Assistant — Qt qch ファイルの再配布可能で設定可能なドキュメントリーダー。
- Qt Designer — Qt ウィジェットのためのパワフルなクロスプラットフォームの GUI レイアウト・フォームビルダー。
- Qt Quick Designer — QML ファイルのビジュアルエディタ、WYSIWYG をサポート。Qt Quick アプリケーションを素早くデザインしてスクラッチからコンポーネントを作ることができます。
- QML Viewer — QML ドキュメントを読み込むためのツール。QML アプリケーションの開発やデバッグを容易にします。
- qmake — 様々なプラットフォームをまたがった開発プロジェクトのビルドプロセスを簡素化するのを助けるツール。cmake に似ていますが、オプションは少なめで Qt アプリケーションのために作られています。
- uic — *.ui XML ファイルを読み込み対応する C++ ファイルを生成するツール。
- rcc — ビルドプロセスの間に Qt アプリケーションにリソース (画像など) を埋め込むために使われるツール。Qt リソース (.qrc) ファイルで指定されたデータを含む C++ ソースファイルを生成します。
- moc — Qt の C++ 拡張を扱うツール (シグナルとスロット、ランタイムタイプ、ダイナミックプロパティなど)。
バインディング
Qt は人気のある言語全てにバインディングがあります。完全なリストはここを見て下さい。
以下では 'Hello world!' というメッセージを小さなウィンドウで表示するサンプルを示しています。
C++
- パッケージ: qt4
- ウェブサイト: http://qt-project.org/
- ビルド:
g++ $(pkg-config --cflags --libs QtCore QtGui) -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
- パッケージ: qt4
- ウェブサイト: http://qt-project.org/
- 実行:
qmlviewer hello.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 } }
Python
- パッケージ:
- python-pyqt4 - Python 3.x バインディング
- python2-pyqt4 - Python 2.x バインディング
- ウェブサイト: http://www.riverbankcomputing.co.uk/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_())
- パッケージ:
- python-pyside - Python 3.x バインディング
- python2-pyside - Python 2.x バインディング
- ウェブサイト: http://www.pyside.org/
- 実行:
python hello-pyside.py
またはpython2 hello-pyside.py
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#
- パッケージ: kdebindings-qyoto
- ウェブサイト: http://techbase.kde.org/Development/Languages/Qyoto
- ビルド:
mcs -pkg:qyoto hello.cs
- 実行:
mono hello.exe
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
- パッケージ: kdebindings-qtruby
- ウェブサイト: http://rubyforge.org/projects/korundum/
- 実行:
ruby hello.rb
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/
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
- パッケージ: kdebindings-perlqt
- ウェブサイト: http://code.google.com/p/perlqt4/
- 実行:
perl hello.pl
hello.pl
use QtGui4; my $a = Qt::Application(\@ARGV); my $hello = Qt::Label("Hello World!", undef); $hello->show; exit $a->exec;
Lua
- パッケージ: libqtluaAUR
- ウェブサイト: http://www.nongnu.org/libqtlua/
- 実行:
qtlua hello.lua
hello.lua
label = qt.new_widget("QLabel") label:setText("Hello World!") label:show()