Qt

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動先: 案内検索
Qt
Qt logo 2016.svg
Qt Designer 4 4 3.png
Qt designer を用いたGUI設計
開発元 トロールテック (1991-2008)
ノキア (2008-2011)
ディジア英語版 (2012-2014)
Qt Project英語版 (2011-現在)
初版 1992年(25年前) (1992
最新版

5.9.2 / 2017年10月6日(2か月前) (2017-10-06

[1]
最新評価版

5.10 Beta / 2017年10月9日(2か月前) (2017-10-09

[2]
リポジトリ code.qt.io/qt/qt.git
プログラミング言語 C++
対応OS FreeBSD組み込みLinuxmacOSWindowsLinux(X11Wayland)、Windows CESymbianMeeGoAmiga OSAndroidiOS
プラットフォーム クロスプラットフォーム
サポート状況 開発中
種別 アプリケーションフレームワーク
ライセンス Qt Commercial License[3]
GPL 2.0 3.0[3]
LGPL 3.0[3]
公式サイト www.qt.io
テンプレートを表示

Qt[kjuːt] キュート)とは、クロスプラットフォームアプリケーションフレームワークである。The Qt Company英語版Qt Project英語版によって開発されている。キュー・ティーと発音されることもあるが公式にはキュートである。

GUIツールキットとして広く知られているQtであるが、コンソールツールやサーバのような非GUIプログラムでも広く使用されている。

ライセンスには商用版とオープンソース版があり、現在のオープンソース版のライセンスはLGPLおよびGPLである。商用版を購入するとQt商用ライセンス(Qt Commercial License)でソフトウェアを開発することができる。LGPL版は、2009年3月にリリースされたQt 4.5から提供され始めた。これによりQtは営利企業にとってもより使いやすいライブラリーとなった。

日本ではSRAアイ・エス・ビーなどが、Qt関連サービスの提供、商用ライセンスの販売などを行っている。

QtはC++で開発されており、単独のソースコードによりX Window System(Linux、UNIX等)、WindowsmacOS組み込みシステムといった様々なプラットフォーム上で稼働するアプリケーションの開発が可能である。またコミュニティーにより多言語のバインディングが開発されており、JavaからQtを利用できるようにしたQt Jambi、さらにQtをRubyPythonPerlC#などから利用できるようにしたオープンソースAPIが存在する。

このように開発が容易であり高速、スタイリッシュなQtはライセンスが多様なこともあり、KDEを始めとするオープンソースのアプリケーションに限らず、商業アプリケーションでの採用例も多く様々な分野で使用されている。

OpenGLSVGXMLといった最新技術にも対応している他、日本語を含む多バイト文字入力フレームワークへも対応している。

オープンソース版[編集]

GPLまたはLGPLが適用される。LGPLは、バージョン4.5から適用できる。Windowsや多くのUnix系OS、macOS向け、あるいはEmbedded Linux、Windows CE、Symbian(Qt4.6より)向けにパッケージが配布されている。

設計[編集]

モジュール[編集]

Qt 5のモジュール群の一部を以下に示す[4]

Qt Essentials[編集]

  • Qt Core - GUI向け以外のコアとなるクラスを保持する。
  • Qt Gui - GUIのメインとなるクラスを保持する。OpenGLを含む。
  • Qt Multimedia - 音楽、動画、ラジオ、カメラなどのマルチメディア機能を実装する。
  • Qt Multimedia Widgets - マルチメディア機能を実現するウィジェット群。
  • Qt Network - ネットワークプログラミングを簡単にするためのクラス群。
  • Qt QML - QMLとJavaScriptに関するクラスを保持している。
  • Qt Quick - カスタムユーザーインターフェイスを備えた高度に動的なアプリケーションを構築するためのフレームワーク。
  • Qt Quick Controls - デスクトップ風のユーザーインターフェイスを作るためのQt QuickベースのUIコントロール群。
  • Qt Quick Dialogs - Qt Quickアプリケーションにシステムダイアログを提供する。
  • Qt Quick Layouts - ユーザーインターフェイスにQt Quick 2ベースのアイテムを使用するアイテムのレイアウト。
  • Qt SQL - SQLを使うデータベースのためのクラス群。
  • Qt Test - Qtアプリケーションとライブラリのユニットテストのためのクラス群。
  • Qt Widgets - Qt GuiをC++ウィジェットで拡張するためのクラス群。

Qt Add-Ons[編集]

  • Active Qt - WindowsでActiveXやCOMを使うアプリケーションのためのクラス群。
  • Qt 3D - 2Dや3Dレンダリングをサポートする近リアルタイムシミュレーションシステムのための機能。
  • Qt Android Extras - Android固有の機能を使うためのAPI。
  • Qt Bluetooth - Bluetoothハードウェアへのアクセスを提供する。
  • Qt Canvas 3D - JavaScriptを使ったQt QuickアプリケーションからOpenGL風の3D描画を可能にする。
  • Qt Concurrent - 低レベルな操作なしにマルチスレッドプログラムを書くためのクラス群。
  • Qt D-Bus - D-Busプロトコルを使用したプロセス間通信のためのクラス群。
  • Qt Gamepad - Qtアプリケーションのゲームパッドハードウェアのサポートを可能にする。
  • Qt Graphical Effects - Qt Quick 2で使うためのグラフィカルエフェクト。
  • Qt Image Formats - Qt Guiでサポートされていない画像フォーマットのためのプラグイン群。
  • Qt Location - QMLアプリケーションで地図の表示や道案内やコンテンツの配置をする。
  • Qt Mac Extras - macOS固有の機能を使うためのAPI。
  • Qt NFC - NFCハードウェアへのアクセスを提供する。
  • Qt Positioning - スマートフォンなどで位置情報を提供する。
  • Qt Print Support - 印刷を簡単にするためのクラス群。
  • Qt Purchasing - Qtアプリケーションのアプリ内課金を可能にする。
  • Qt Sensors - センサーハードウェアへのアクセスとモーションジェスチャーの認識を提供する。
  • Qt Serial Port - ハードウェアと仮想シリアルポートへのアクセスを提供する。
  • Qt SVG - SVGファイルの内容を表示するクラスを保持する。SVG 1.2 Tinyの機能をサポートする。
  • Qt WebEngine - アプリケーションにウェブコンテンツを埋め込むためのクラスと関数群。
  • Qt WebView - QMLアプリケーションでウェブコンテンツをプラットフォームのネイティブAPIを使い、アプリケーションに完全なウェブレンダリングエンジンを含むことなく表示する。
  • Qt Windows Extras - Windows固有の機能を使うためのAPI。
  • Qt X11 Extras - X11固有の機能を使うためのAPI。
  • Qt XML - SAXおよびDOMインターフェイスを実装。

ネイティブUI描画APIの使用[編集]

かつてQtはプラットフォームのネイティブの見た目をエミュレートしていたため、ときどきエミュレーションが不完全な場合に微妙な不一致が発生することもあったが、最近のバージョンのQtはそれぞれのプラットフォームのネイティブAPIでQtコントロールの描画を行うため、そのような問題に苦しめられることもなくなった[5]

メタオブジェクトコンパイラ[編集]

mocと呼ばれるメタオブジェクトコンパイラは、Qtプログラムのソースコードを入力として実行されるツールである。C++のソースコードにマクロを1、2行記述するだけで、mocがそれを解釈しプログラムで使用されるクラスについての「メタ情報」とともに追加のC++コードを挿入して出力する。このシステムにより、ネイティブのC++では利用できなかったり実現しようとすると煩雑なシグナル&スロットシステムやメタプログラミング、非同期関数呼び出しなどを簡単に利用できる。

シグナル&スロット[編集]

オブジェクト間でコミュニケーションする時にObserver パターンを簡単に使えるようにするための仕組み。あるオブジェクトがシグナルを発信するとそのシグナルに接続してあるオブジェクトのスロット(関数)が呼ばれる。発信側は受信側を知る必要がなく、インクルード関係をシンプルに保つことができる。

バインディング[編集]

Qtはさまざまな言語用のバインディングを持っており[6]、機能セットの一部または全部を実装している。

Qtによるhello world[編集]

#include <QtGui>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QLabel label("Hello, world!");
    label.show();
    return app.exec();
}

Qt hello world プログラムのコンパイルおよび実行[編集]

  1. Helloフォルダを作る
  2. 上のプログラムをHello.cppとしてHelloフォルダに保存する
  3. Helloフォルダで以下を実行
    1. qmake -project
    2. qmake
    3. make(または gmake や nmake 等。OSおよびコンパイラごとに異なる)
  4. 実行する ./release/Hello (Windowsなら release\Hello.exe)

開発環境・デザインツールなど[編集]

クロスプラットフォームの統合開発環境Qt Creator英語版、GUI エディタのQt Designer、翻訳支援ツールのQt Linguist、リファレンスドキュメントビューアのQt Assistant等の開発支援ツールが付属しており、これらを使用することで高速な開発が可能となっている。その他のものとしてWindowsのVisual Studioでの開発を可能にするプラグインVisual Studio Add-inが用意されている。またEclipse上で開発を可能にするQt Eclipse Integrationも用意されている。また、Unix/X11(Linuxなど)では、KDevelopが使用できる。

Qt/UNIX上ではGCC、Qt/WindowsではMicrosoft Visual Studio上のコンパイラが使える他、MinGW等のコンパイラでの開発も可能である。

歴史[編集]

Quasar Technologies社のHaavard Nord と Eirik Chambe-Eng(Qtの開発者であり、現在TrolltechのCEO、および社長)は、1991年にQtの開発をはじめた(Quasar Technologies社はその後Troll Tech社、Trolltech社へと社名を変更していく)。

Qtと名づけられたのは、Qという文字がHaavardの使っていたEmacsのフォントの中でもっとも美しく見えたという理由からである。tはtoolkitの略語である。

KDEがLinuxで主要なデスクトップ環境になることが明確になった1998年頃、KDEがQtベースで開発されていることから、フリーソフトウェアであるKDEがライセンス上、Trolltech社のQPLに抵触する可能性が懸念された。

背景は以下の通りである。

まずバージョン1.45まではQtのソースコードは、FreeQt licenseでリリースされていた。しかしバージョン2.0からは、このライセンスはQ Public License (QPL) に変更された。Free Software Foundationによると、QPLはGPLとは矛盾するライセンスであった。この問題はKDE側とTrolltech社との間で協議されることになり、結果、KDE Free Qt Foundationが発足されることになった。結果、QtはQPLとGPLのデュアルライセンスで配布されることが決まり、この問題は完全に解決した。さらに、将来、Trolltechが何らかの理由で新しいオープンソース版を作成することができなくなった場合でも、KDE Free Qt FoundationによりQtの開発を続けることが保証されることになった。

最初の二つのバージョンでは、プラットフォームはUNIX及びWindowsプラットホームがサポートされた。当初はQt/X11上でのプロプライエタリライセンスはWindowsプラットホームでは使用できず、WindowsでQtを使用するときはQPLエディションのQtを購入する必要があった。

2001年の終わりにTrolltech社はバージョン3.0をリリースした。バージョン3.0からはMac OS Xプラットフォームもサポート対象となった。Mac OS X上ではGPLで配布されている。

2005年6月にTrolltech社はQtバージョン4をリリースした。Qt4では Windows上でも、QtをGPLでソースコードを公開することになった。これにより、Windows, Mac OS, Unixの全てのプラットフォームでGPLのフリーオープンソースアプリケーションが開発できるようになった。またこのバージョンからコア、GUI、ネットワーク、XML、OpenGLなど、機能別にモジュールが分割された。不要な機能は読み込まれないため、メモリの節約になる。その一方、Qt4はQt2および3とソースコードに互換性がない。このため現在でもQt3を使い続けるユーザーは多い。またKDEは3から4へバージョンアップする際、ソースコードの全面的な書き直しが必要となったためリリースが大幅に遅れた。

2009年3月にLGPLが適用となるバージョン4.5が発表された。これはTrolltech社がNOKIA社に買収されたことにともなうもので、組み込み実績の多いQtをプロプライエタリなソフトウェアでもより使用しやすくするためである。バージョン4.5においても、Qtの商用ライセンスは存続し、LGPLですら許容できない(リバースエンジニアリング禁止条項を含むなど)場合は商用ライセンスを使用する必要がある。

2009年5月には、Gitリポジトリが公開され、ユーザからのパッチのコミットがより簡易になった。

なお、初期のバージョンにおいては日本語固有の処理にバグがあり、ライセンス上それを修正し配付することが困難であったため、QtおよびKDEの普及が日本語圏において遅れることとなった。この問題はTrolltech社(当時)が日本語パッチを特別に認めることにより解決した。

Chromiumを援用することがQt5.6で決まったものの、その性能の悪さからすぐに批判され、現在ではQtWebEngineとQtWebKitが混在している。Qt WebBrowser[7]も思ったほどの普及になっていない。これはChromiumの採用バージョンが最新よりかなり遅れることが原因である。

2012年8月9日にディジア英語版がノキアからQtを買収した[8]AndroidiOSWindows 8へのQtの早急な対応を目標に、約125人のQt開発者たちがディジアに移籍された[9][10]

Qtを使用している主なソフトウェア[編集]

脚注[編集]

[ヘルプ]
  1. ^ Qt 5.9.2 Released” (2017年10月6日). 2017年10月11日閲覧。
  2. ^ Qt 5.10 Beta Released”. Qt Project (2017年10月9日). 2017年10月11日閲覧。
  3. ^ a b c Qt Licensing”. 2017年10月11日閲覧。
  4. ^ All Modules”. Qt Project. 2017年10月12日閲覧。
  5. ^ Library - Digia Plc”. 2013年11月1日時点のオリジナルよりアーカイブ。2017年10月12日閲覧。
  6. ^ Language Bindings - Qt Wiki
  7. ^ 外部リンク
  8. ^ http://www.digia.com/en/Home/Company/News/Digia-to-acquire-Qt-from-Nokia/
  9. ^ http://blog.qt.nokia.com/2012/08/09/investment-in-qt-planned-to-continue-digia/
  10. ^ http://blog.qt.nokia.com/2012/08/09/digia-extends-its-commitment-to-qt-with-plans-to-acquire-full-qt-software-technology-and-business-from-nokia/

関連項目[編集]

外部リンク[編集]