「Qt」の版間の差分
m →モジュール |
Infobox Software |
||
1行目: | 1行目: | ||
{{ |
{{Otheruses|アプリケーション|その他の用法|QT}} |
||
{{Infobox |
{{Infobox Software |
||
| name = Qt |
| name = Qt |
||
| logo = |
| logo = [[File:Image tile.png|80px]] |
||
| screenshot = [[File:Qt Designer 4 4 3.png|300px]] |
| screenshot = [[File:Qt Designer 4 4 3.png|300px]] |
||
| |
| 説明文 = Qt designer を用いたGUI設計 |
||
| collapsible = |
| collapsible = |
||
| developer = [[Nokia]], [Digia], Qt community |
| developer = [[Nokia]], [Digia], Qt community |
||
10行目: | 10行目: | ||
| latest release version = 4.8.3 |
| latest release version = 4.8.3 |
||
| latest release date = {{Start date and age|2012|9|13}} |
| latest release date = {{Start date and age|2012|9|13}} |
||
| 最新評価版 = 5.0bata2 |
|||
| 最新評価版発表日 = {{Start date and age|2012|11|13}} |
|||
| programming language = [[C++]] |
| programming language = [[C++]] |
||
| operating system = [[組み込みLinux]] |
| operating system = [[組み込みLinux]]{{・}}[[Mac OS X]]{{・}}[[Microsoft Windows]]{{・}}[[Linux]]/X11{{-}}[[Windows CE]]{{・}}[[Symbian]]{{・}}[[MeeGo]]{{・}}[[Amiga OS]] |
||
| platform = [[ |
| platform = [[クロスプラットフォーム]] |
||
| size = |
| size = |
||
| language = |
| language = |
||
| status = アクティブ |
| status = アクティブ |
||
| genre = [[アプリケーションフレームワーク]] |
| genre = [[アプリケーションフレームワーク]] |
||
| license = [[GNU GPL]]<ref name="Qt GNU GPL v. 3.0 Version">{{cite web |url=http://qt.nokia.com/products/licensing/licensing#qt-gnu-gpl-v |title=Qt GNU GPL v. 3.0 Version|accessdate=2011-06-22}}</ref> 3.0, with Qt special exception |
| license = [[GNU GPL]]<ref name="Qt GNU GPL v. 3.0 Version">{{cite web |url=http://qt.nokia.com/products/licensing/licensing#qt-gnu-gpl-v |title=Qt GNU GPL v. 3.0 Version|accessdate=2011-06-22}}</ref> 3.0, with Qt special exception {{-}}[[GNU LGPL]]<ref name="Qt GNU LGPL v. 2.1 Version">{{cite web |url=http://qt.nokia.com/products/licensing/licensing#qt-gnu-lgpl-v |title=Qt GNU LGPL v. 2.1 Version|accessdate=2011-06-22}}</ref> 2.1{{-}}[[Proprietary software|Commercial Developer License]]<ref name="Qt Commercial Developer License">{{cite web |url=http://qt.nokia.com/products/licensing/licensing#qt-commercial-license |title=Qt Commercial Developer License |accessdate=2010-02-19 }}</ref> |
||
| website = {{URL|http://qt.digia.com/}} |
| website = {{URL|http://qt.digia.com/}} |
||
}} |
}} |
2012年11月27日 (火) 20:20時点における版
ファイル:Image tile.png | |
Qt designer を用いたGUI設計 | |
開発元 | Nokia, [Digia], Qt community |
---|---|
初版 | 1992年 |
最新版 |
4.8.3
/ 2012年9月13日 |
最新評価版 |
5.0bata2
/ 2012年11月13日 |
リポジトリ | |
プログラミング 言語 | C++ |
対応OS | 組み込みLinux · Mac OS X · Microsoft Windows · Linux/X11Windows CE · Symbian · MeeGo · Amiga OS |
プラットフォーム | クロスプラットフォーム |
サポート状況 | アクティブ |
種別 | アプリケーションフレームワーク |
ライセンス | GNU GPL[1] 3.0, with Qt special exception GNU LGPL[2] 2.1Commercial Developer License[3] |
公式サイト |
qt |
Qt(キュート)はC++言語で書かれたアプリケーション・ユーザインタフェース(UI)フレームワークである。GUIツールキットとして広く知られているQtであるが、コンソールツールやサーバのような非GUIプログラムでも広く使用されている。ノキアの一部門Qtデベロップメントフレームワークス社によって開発されている。
ライセンスには商用版とオープンソース版があり、現在のオープンソース版のライセンスはLGPL(Qt4.5より)およびGPL である。商用版を購入するとQt 商用ライセンス(Qt Commercial Developer License)でソフトウェアを開発することができる[4]。LGPL版は、2009年3月にリリースされたQt 4.5から提供され始めた。これによりQtは営利企業にとってもより使いやすいライブラリーとなった。
日本ではSRA[5]がQtデベロップメントフレームワークス社のパートナーとなり、関連サービスの販売を行っている。その他に、アイ・エス・ビー[6]もパートナー契約を結んでいる。
QtはC++で開発されており、単独のソースコードによりX Window System(Linux, UNIX等)、Windows、Mac OS X、組み込みシステムといった様々なプラットフォーム上で稼働するアプリケーションの開発が可能である。 またコミュニティーにより多言語のバインディングが開発されており、JavaからQtを利用できるようにしたQt Jambi、さらにQtをRuby、Python、Perl、C#などから利用できるようにしたオープンソースのAPIが存在する。
このような開発の容易さに加えて高速、スタイリッシュなQtは、オープンソース版、商用版を合わせて、様々な分野で使用されている。
QtはGTK+やMFC等、他の標準的なグラフィックツールキットに比べて、もっとも後発であることもあり[要出典]、以前から存在するライブラリーのよいところを集めたアーキテクチャーとなっている。そのため、商業アプリケーションでの採用例が多い他、オープンソース版も用意されているおかげで、KDEという高品質なデスクトップ環境も開発された[要出典]。 OpenGLやSVG、XMLといった最新技術にも対応している他、日本語を含む多バイト文字入力フレームワークへも対応している[7]。
2012年8月9日にディジアがノキアからQtを買収した[8]。AndroidやiOS、Windows 8へのQtの早急な対応を目標に、約125人のQt開発者たちがディジアに移籍された[9][10]。
商用版
商用版のQtにはConsole Edition、Light Edition、Desktop Editionの三つの形態があり、以下の違いがある。
機能 | Console Edition | Light Edition | Desktop Edition |
---|---|---|---|
Qt コアクラス | ○ | ○ | ○ |
Qt GUIクラス | ○ | ○ | |
ネットワーキング | ○ | ○ | |
OpenGL | ○ | ||
データベース/SQL | ○ | ○ | |
SVG | ○ | ||
XML | ○ | ○ | |
Qt3サポート | 部分的 | ○ | |
Qt Designer拡張クラス | ○ | ||
単体テストフレームワーク | ○ | ○ | ○ |
ActiveQt | ○ |
このほかにも教育・研究目的の使用のみ適用されるアカデミックライセンスや、小規模企業に対して割引が適用されるスモールビジネスプログラムがある。
オープンソース版
GPLまたはLGPLが適用される。LGPLは、バージョン4.5から適用できる。Windowsや多くのUNIX系OS、Mac OS X向け、あるいはEmbedded Linux、Windows CE、Symbian(Qt4.6より)向けにパッケージが配布されている。
設計
最初のリリースにおけるQtの革新性は幾つかのキー概念に基づいている。
モジュール
- 一般的なソフト開発用のモジュール
- QtCore — QtCoreはコアとなるGUI向け以外のクラスを保持し、イベントループおよびQtのsignalやslotメカニズムを含む。また、Unicode、スレッド、マッピングファイル、共有メモリ、正規表現、ユーザーおよびアプリケーション設定などに関するプラットフォームに依存しない抽象層を含んでいる。
- QtGui — QtGuiモジュールはGUIのメインとなるクラスを保持する。多数のテーブル、ツリー、リストボックスなどのModel View Controller (MVC) デザインパターンに基づいたクラスを含む。また、おしゃれな2Dグラフィクスのキャンバスウィジェットを持ち、何千ものアイテムを1つのウィジェットで管理できる実装も提供されている。
- QtMultimedia — QtMultimediaは低レベルのマルチメディア機能を実装する。
- QtNetwork — QtNetworkはUDPやTCPのクライアント、サーバーを実装するためのクラスを保持する。FTPやHTTPのクライアントおよびDNSルックアップの実装を含む。ネットワークイベントはイベントループに統合され、ネットワークアプリケーションを非常に開発しやすくしている。
- QtOpenGL — QtOpenGLはOpenGLで3Dグラフィックをレンダリングすることを可能にするクラスを保持している。
- QtOpenVG — QtOpenVG はOpenVG描画のサポートを提供するプラグインである。
- QtScript — QtScriptモジュールはECMAScriptベースのスクリプトエンジンで、Qtの機能をシームレスに実行できる。
- QtScriptTools — QtScriptToolsはQtScriptにデバッガなどの追加的な機能を提供する。
- QtSql — QtSqlはオープンソースおよび商用SQLデータベース(RDB)を統合するクラスを保持する。データベースのテーブル用の編集可能なデータモデルを含み、GUIクラスから使用できる。SQLiteに対する実装を含む。
- QtSvg — QtSvgはSVGファイルの内容を表示するクラスを保持する。SVG 1.2 Tinyの静的な機能をサポートする。
- QtWebKit — QtWebKitはWebKitベースのレイアウトエンジンであり、ウェブコンテンツの描画およびアクセスのためのクラスを提供する。
- QtXml — QtXmlはSAXおよびDOMインターフェイスを実装し、QtのXMLパーサとして機能する。
- QtXmlPatterns — QtXmlPatternsはXPath、XQuery、XSLT、XML Schema validationを提供する。
- Phonon
- Qt3Support — Qt3SupportはQt4からQt3へのバックポートのクラスを提供する。
- QtDeclarative[11] - QtDeclarative はQMLによって滑らかなユーザーインターフェースを宣言的 (declaratively) に構築するエンジンである。
- Qtの開発ツールとして動作するモジュール
- QtDesigner
- QtUiTools
- QtHelp
- QtTest
- Unix開発者向けのモジュール
- QtDBus - QtDBusはD-Busプロトコルを使用したIPC(Inter-Process Communication)を達成することを可能にするライブラリである。
- Windows開発者向けのモジュール
- QAxContainer — QAxContainerはActiveXコントロールおよびCOMオブジェクトへの拡張である。
- QAxServer — QAxServerは通常のQtバイナリをCOMサーバーに変更することを可能にする静的ライブラリである。
ネイティブUI描画APIの使用
Qtはプラットフォームを意図したネイティブの見た目をエミュレートしてきた。ときどき微妙な食い違いが発生することもある。エミュレーションが不完全な場合である。最近のバージョンのQtは異なるプラットフォームのネイティブAPIでQtコントロールの描画を行い、そのような問題によって苦しめられることも少なくなった。[12]
メタオブジェクトコンパイラ
mocと呼ばれるmetaobjectコンパイラは、Qtプログラムのソースコードを入力として実行されるツールである。 C++のコードから成るマクロをアノテーションとして解釈し、これを利用して、プログラムで使用されるクラスについての「メタ情報」とともに追加のC++コードを生成する。このメタ情報は、ネイティブのC++では利用できない以下のような特徴をQtに提供するために使われる:signal/slot system、introspection、非同期関数呼び出し
QtScript ECMAScriptインタプリタ
QtScriptはクロスプラットフォームのツールキットであり、インタープリタ型のスクリプト言語を使うことで、Qt/C++アプリケーションをスクリプトに直すことができる: Qt Script (based on ECMAScript/JavaScript).
Qt 4.3.0以降では、QSA[13]にもとづくスクリプトAPI[14]が外部のライブラリとしてではなく、Qtのコアに統合されるようになった。
バインダ
下の表に示すように、Qtは一定の幅のさまざまな言語用のbindingsを持っており[15]、機能セットの一部または全部を実装している。
language | name - description of binding | QtCore | QtDesigner | QtGui | QtNetwork | QtOpenGL | QtSql | QtScript | QtSvg | QtTest | QtUiTools | QtWebKit | QtXml | license for open-source apps | license for proprietary apps |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Ada | QtAda | Yes | Yes | Yes | No[16] | Yes | Yes | No | No | No | Yes | No | Yes | GPL | GMGPL + fee |
C++ | Qt – native C++ | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | LGPL | LGPL or Proprietary + fee |
C# & .NET | Qyoto – See also Kimono for KDE | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
C# & .NET | qt4dotnet | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | LGPL | LGPL | |
D | QtD | Yes | No | Yes | Yes | Yes | No | No | Yes | No | No | Yes | Yes | ||
Haskell | Qt Haskell | ||||||||||||||
Harbour | hbqt | Yes | No | Yes | No | No | No | No | No | No | No | No | GPL | LGPL like | |
Java | Qt Jambi | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | LGPL | LGPL |
Lisp | CommonQt – Bindings for Common Lisp | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | BSD License | BSD License |
Lua | lqt - Bindings | Yes | No[17] | Yes | Yes | Yes | No | Yes | Yes | No | No | Yes | No | MIT | MIT |
Lua | QtLua - Bindings and script engine | LGPL | LGPL | ||||||||||||
Pascal | FreePascal Qt4 | ||||||||||||||
Perl | PerlQt4 | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | GPL | No |
PHP | PHP-Qt | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | LGPL | LGPL |
Python | PyQt | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | GPL | プロプライエタリ + fee |
Python | PySide – from OpenBossa (a subsidiary of Nokia). | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | LGPL | LGPL | ||
Python | PythonQt | LGPL | LGPL | ||||||||||||
QML | QML – It is part of the Qt | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | LGPL | LGPL or Proprietary + fee |
R | qtbase | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | GPL | No |
Ruby | QtRuby | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | LGPL | LGPL |
Tcl | qtcl | GPL | No | ||||||||||||
language | name & description of binding | QtCore | QtDesigner | QtGui | QtNetwork | QtOpenGL | QtSql | QtScript | QtSvg | QtTest | QtUiTools | QtWebKit | QtXml | license for open-source apps | license for proprietary apps |
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フォルダで以下を実行
a. qmake -project b. qmake c. 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 が用意されている。また Java で作られているクロスプラットフォームの開発環境 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社(当時)が日本語パッチを特別に認めることにより解決した。
Qtを使用している主なソフトウェア
- 標準的なデスクトップ環境KDE
- Adobe Photoshop Elements
- Adobe After Effects CS5
- Adobe Premiere Pro CS5
- Autodesk Maya 2011
- Nuke
- Google Earth
- モバイルWnn
- Doxygen
- Skype
- CadソフトQCad
- 名前変更プログラム krename
- 楽譜編集プログラム Rosegarden
- 楽譜編集プログラム MuseScore
- 仮想キーボード vmpk
- シーケンサ Muse
脚注
- ^ “Qt GNU GPL v. 3.0 Version”. 2011年6月22日閲覧。
- ^ “Qt GNU LGPL v. 2.1 Version”. 2011年6月22日閲覧。
- ^ “Qt Commercial Developer License”. 2010年2月19日閲覧。
- ^ 初期においては独自ライセンスのQPL(Qt3.0までの商用ライセンス)がGPLと衝突する問題が生じたが、オープンソース版をGNU GPLの下でも公開して、この問題は解消された。また現在はライセンスとして商用ライセンス、GPL、LGPLの3つが用意されており、このようなライセンス上の問題はない。
- ^ SRAは、Qt 公式のパートナーで「Qt コンサルティングパートナー」、「Qt トレーニングパートナー」の契約を結んでいる。
- ^ アイ・エス・ビーは、Qt 公式のパートナーで「Qt コンサルティングパートナー」、「Qt トレーニングパートナー」の契約を結んでいる。
- ^ ただし、初期バージョンにおいては、日本語を含む多バイト文字入力フレームワークへの対応が遅れていたため、日本での普及が遅れるという結果となった。
- ^ http://www.digia.com/en/Home/Company/News/Digia-to-acquire-Qt-from-Nokia/
- ^ http://blog.qt.nokia.com/2012/08/09/investment-in-qt-planned-to-continue-digia/
- ^ 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/
- ^ [1]
- ^ Products - Qt – A cross-platform application and UI framework 'Qt uses the native graphics APIs of each platform it supports, taking full advantage of system resources and ensuring that applications have native look and feel.'
- ^ QSA 1.2: Qt Script for Applications
- ^ Qt 4.3: QtScript Module
- ^ QT Language Bindings
- ^ [2] Supported Qt modules in QtAda
- ^ [3] Supported Qt modules in lqt