Qt

提供: ArchWiki
2015年1月7日 (水) 11:29時点におけるKusakata (トーク | 投稿記録)による版
ナビゲーションに移動 検索に移動

関連記事

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

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

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

インストール

現在公式リポジトリでは3つのバージョンの Qt が利用可能です。以下のパッケージでインストールできます:

  • Qt 5.xqt5-base パッケージでインストールできます。ドキュメントは qt5-doc パッケージに入っています。
  • Qt 4.xqt4 パッケージでインストールできます。ドキュメントは qt4-docAUR パッケージに入っています。
  • Qt 3.xqt3AUR パッケージでインストールできます。ドキュメントは qt3-docAUR パッケージに入っています。
警告: Qt のパッケージは /usr/bin にバイナリ (例: qmake) を提供しません。代わりに -qt5, -qt4, -qt3 のシンボリックリンクが提供されます (例: qmake-qt5, qmake-qt4, qmake-qt3)。このため Qt3/4 のアプリケーションではコンパイルが失敗するかもしれません。在来のバイナリをインストールするには、次のセクションの qtchooser を見て下さい。

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

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

環境変数を使う

例えば、Qt4 に設定するには ~/.{bash,zsh}_profileQT_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 デスクトップのデスクトップテーマ。
http://www.oxygen-icons.org/ || kdebase-runtime
  • QtCurve — GTK+ と Qt アプリケーションをサポートしている人気のデスクトップテーマ、細かい設定が可能。
http://kde-look.org/content/show.php?content=40492 || qtcurve
  • Skulpture — KDE と Qt プログラムの GUI スタイルアドオン。ビジュアルエクスペリエンスを向上させる影とグラデーションによるクラシカルで立体的なアートワークが特徴。
http://kde-look.org/content/show.php/?content=59031 || skulptureAUR
  • Polymer — KDE Plastik Style の Qt3 移植。
http://kde-look.org/content/show.php?content=21748 || polymerAUR
  • Bespin — 細かくカスタマイズできる KDE テーマ。
http://cloudcity.sourceforge.net/frame.php || bespin-svnAUR

フォント

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

バインディング

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

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

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_())
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

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 is not designed to develop an application in pure Lua but rather to extend a Qt C++ application using Lua as scripting language.

参照