「Qt」の版間の差分

出典: フリー百科事典『ウィキペディア(Wikipedia)』
削除された内容 追加された内容
CharHigh (会話 | 投稿記録)
Infobox Software
1行目: 1行目:
{{otheruses|アプリケーション|その他の用法|QT}}
{{Otheruses|アプリケーション|その他の用法|QT}}
{{Infobox software
{{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]]
| caption = The Qt designer used for GUI designing
| 説明文 = 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]], [[Mac OS X]], [[Microsoft Windows]], [[Linux]]/X11, [[Windows CE]], [[Symbian]], [[MeeGo]], [[Amiga OS]]
| operating system = [[組み込みLinux]]{{・}}[[Mac OS X]]{{・}}[[Microsoft Windows]]{{・}}[[Linux]]/X11{{-}}[[Windows CE]]{{・}}[[Symbian]]{{・}}[[MeeGo]]{{・}}[[Amiga OS]]
| platform = [[Cross-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 </br>[[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</br>[[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>
| 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時点における版

Qt
ファイル:Image tile.png
Qt designer を用いたGUI設計
開発元 Nokia, [Digia], Qt community
初版 1992年 (32年前) (1992)
最新版
4.8.3 / 2012年9月13日 (11年前) (2012-09-13)
最新評価版
5.0bata2 / 2012年11月13日 (11年前) (2012-11-13)
リポジトリ ウィキデータを編集
プログラミング
言語
C++
対応OS 組み込みLinux · Mac OS X · Microsoft Windows · Linux/X11
Windows CE · Symbian · MeeGo · Amiga OS
プラットフォーム クロスプラットフォーム
サポート状況 アクティブ
種別 アプリケーションフレームワーク
ライセンス GNU GPL[1] 3.0, with Qt special exception
GNU LGPL[2] 2.1
Commercial Developer License[3]
公式サイト qt.digia.com
テンプレートを表示

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等)、WindowsMac OS X組み込みシステムといった様々なプラットフォーム上で稼働するアプリケーションの開発が可能である。 またコミュニティーにより多言語のバインディングが開発されており、JavaからQtを利用できるようにしたQt Jambi、さらにQtをRubyPythonPerlC#などから利用できるようにしたオープンソースの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はUDPTCPのクライアント、サーバーを実装するためのクラスを保持する。FTPHTTPのクライアントおよびDNSルックアップの実装を含む。ネットワークイベントはイベントループに統合され、ネットワークアプリケーションを非常に開発しやすくしている。
    • QtOpenGL — QtOpenGLはOpenGL3Dグラフィックをレンダリングすることを可能にするクラスを保持している。
    • 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はXPathXQueryXSLTXML 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 systemintrospection、非同期関数呼び出し

QtScript ECMAScriptインタプリタ

QtScriptはクロスプラットフォームのツールキットであり、インタープリタ型のスクリプト言語を使うことで、Qt/C++アプリケーションをスクリプトに直すことができる: Qt Script (based on ECMAScript/JavaScript).

Qt 4.3.0以降では、QSA[13]にもとづくスクリプトAPI[14]が外部のライブラリとしてではなく、Qtのコアに統合されるようになった。

バインダ

下の表に示すように、Qtは一定の幅のさまざまな言語用のbindingsを持っており[15]、機能セットの一部または全部を実装している。

Qt language bindings
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を使用している主なソフトウェア

脚注

  1. ^ Qt GNU GPL v. 3.0 Version”. 2011年6月22日閲覧。
  2. ^ Qt GNU LGPL v. 2.1 Version”. 2011年6月22日閲覧。
  3. ^ Qt Commercial Developer License”. 2010年2月19日閲覧。
  4. ^ 初期においては独自ライセンスのQPL(Qt3.0までの商用ライセンス)がGPLと衝突する問題が生じたが、オープンソース版をGNU GPLの下でも公開して、この問題は解消された。また現在はライセンスとして商用ライセンス、GPL、LGPLの3つが用意されており、このようなライセンス上の問題はない。
  5. ^ SRAは、Qt 公式のパートナーで「Qt コンサルティングパートナー」、「Qt トレーニングパートナー」の契約を結んでいる。
  6. ^ アイ・エス・ビーは、Qt 公式のパートナーで「Qt コンサルティングパートナー」、「Qt トレーニングパートナー」の契約を結んでいる。
  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/
  11. ^ [1]
  12. ^ 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.'
  13. ^ QSA 1.2: Qt Script for Applications
  14. ^ Qt 4.3: QtScript Module
  15. ^ QT Language Bindings
  16. ^ [2] Supported Qt modules in QtAda
  17. ^ [3] Supported Qt modules in lqt

関連項目

外部リンク