「Qt」の版間の差分
Iwai.masaharu (会話 | 投稿記録) m Category:オープンソースを除去; Category:オープンソースソフトウェアを追加 (HotCat使用) |
|||
636行目: | 636行目: | ||
* [https://www.qt.io/ Qt] |
* [https://www.qt.io/ Qt] |
||
* [http://qt-users.jp/ 日本 Qt ユーザー会] |
* [http://qt-users.jp/ 日本 Qt ユーザー会] |
||
* [http://web.archive.org/web/20120617153806/http://qt.nokia.com/title-jp?set_language=ja&cl=ja Qt Development Frameworks社の公式サイト(日本語)](2012年6月17日時点の[[インターネット |
* [http://web.archive.org/web/20120617153806/http://qt.nokia.com/title-jp?set_language=ja&cl=ja Qt Development Frameworks社の公式サイト(日本語)](2012年6月17日時点の[[インターネットアーカイブ|アーカイブ]]) |
||
* [http://web.archive.org/web/20120722052556/http://qt.nokia.com/ Qt Development Frameworks社の公式サイト(英語)](2012年7月22日時点の[[インターネット |
* [http://web.archive.org/web/20120722052556/http://qt.nokia.com/ Qt Development Frameworks社の公式サイト(英語)](2012年7月22日時点の[[インターネットアーカイブ|アーカイブ]]) |
||
* [http://www.sra.co.jp/qt/ SRAのQtサイト] |
* [http://www.sra.co.jp/qt/ SRAのQtサイト] |
||
* [http://www.isb.co.jp/qt/ アイ・エス・ビーのQtサイト] |
* [http://www.isb.co.jp/qt/ アイ・エス・ビーのQtサイト] |
2017年9月4日 (月) 14:49時点における版
Qt designer を用いたGUI設計 | |
開発元 |
トロールテック (1991-2008) ノキア (2008-2011) ディジア (2012-現在) Qt Project (2011-現在) |
---|---|
初版 | 1992年 |
最新版 |
5.9
/ 2017年5月31日[1] |
最新評価版 |
5.8 Alpha
/ 2016年9月5日[2] |
リポジトリ | |
プログラミング 言語 | C++ |
対応OS | FreeBSD · 組み込みLinux · macOS · Windows · Linux/X11Windows CE · Symbian · MeeGo · Amiga OS · Android · iOS |
プラットフォーム | クロスプラットフォーム |
サポート状況 | 開発中 |
種別 | アプリケーションフレームワーク |
ライセンス | GNU GPL[3] 3.0, with Qt special exception GNU LGPL[4] 2.1Commercial Developer License[5] |
公式サイト |
www |
Qt(キュート)はC++言語で書かれたアプリケーション・ユーザインタフェース (UI) フレームワークである。ディジアの一部門Qtデベロップメントフレームワークスによって開発されている。
能力
Qt は、キュート[ˈkjuːt]と発音する。また、俗称ではあるがキュー・ティーと発音されることもよくある。GUIツールキットとして広く知られているQtであるが、コンソールツールやサーバのような非GUIプログラムでも広く使用されている。
ライセンスには商用版とオープンソース版があり、現在のオープンソース版のライセンスはLGPL(Qt4.5より)およびGPL である。商用版を購入するとQt商用ライセンス(Qt Commercial Developer License)でソフトウェアを開発することができる[6]。LGPL版は、2009年3月にリリースされたQt 4.5から提供され始めた。これによりQtは営利企業にとってもより使いやすいライブラリーとなった。
日本では SRA やアイ・エス・ビーなどが、Qt 関連サービスの提供、商用ライセンスの販売などを行っている。
日本の Qt コミュニティには、日本 Qt ユーザー会などがあり、Qt に関する情報交換、交流の場になっている。また、公式のコミュニティサイト Qt Projectでは、Qt に関するドキュメント、フォーラム、ウィキ、グループなどのサービスが提供されており、英語の他に日本語などの言語にも対応している。
QtはC++で開発されており、単独のソースコードによりX Window System(Linux、UNIX等)、Windows、macOS、組み込みシステムといった様々なプラットフォーム上で稼働するアプリケーションの開発が可能である。またコミュニティーにより多言語のバインディングが開発されており、JavaからQtを利用できるようにしたQt Jambi、さらにQtをRuby、Python、Perl、C#などから利用できるようにしたオープンソースのAPIが存在する。
このように開発が容易であり高速、スタイリッシュなQtはライセンスが多様なこともあり、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、macOS向け、あるいは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ベースのレイアウトエンジンであり、ウェブコンテンツの描画およびアクセスのためのクラスを提供する。5.6でQtWebEngine[11]へ移行。QtWebKitも当分の間は存続が決定している。
- QtXml
- QtXmlはSAXおよびDOMインターフェイスを実装し、QtのXMLパーサとして機能する。
- QtXmlPatterns
- QtXmlPatternsはXPath、XQuery、XSLT、XML Schema validationを提供する。
- Phonon
- Qt3Support
- Qt3SupportはQt4からQt3へのバックポートのクラスを提供する。
- QtDeclarative
- 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 プログラムのコンパイルおよび実行
- Helloフォルダを作る
- 上のプログラムをHello.cppとしてHelloフォルダに保存する
- Helloフォルダで以下を実行
- qmake -project
- qmake
- make(または gmake や nmake 等。OSおよびコンパイラごとに異なる)
- 実行する ./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社(当時)が日本語パッチを特別に認めることにより解決した。
Chromiumを援用することがQt5.6で決まったものの、その性能の悪さからすぐに批判され、現在ではQtWebEngineとQtWebKitが混在している。Qt WebBrowser[18]も思ったほどの普及になっていない。これはChromiumの採用バージョンが最新よりかなり遅れることが原因である。
Qtを使用している主なソフトウェア
- 標準的なデスクトップ環境KDE
- Autodesk Maya 2011
- 動画編集ソフトウェア Avidemux
- Doxygen
- CADソフト FreeCAD
- Google Earth
- シーケンサ Muse
- Nuke
- 楽譜編集プログラム MuseScore
- データ可視化ソフト ParaView
- GISソフト QGIS
- 楽譜編集プログラム Rosegarden
- Skype
- モバイルWnn
脚注
- ^ Lars Knoll (2017年5月31日). “Qt 5.9 released”. 2017年6月6日閲覧。
- ^ Lars Knoll (2016年9月5日). “Qt 5.8 Alpha Released”. Qt Project. 2016年10月16日閲覧。
- ^ “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つが用意されており、このようなライセンス上の問題はない。
- ^ ただし、初期バージョンにおいては、日本語を含む多バイト文字入力フレームワークへの対応が遅れていたため、日本での普及が遅れるという結果となった。
- ^ 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/
- ^ Blinkを参考にした仕様だが、タブX個・イコール・バックグラウンドプロセスX個にメモリ使用量が限定されており、Blinkのように複数のプロセスが同時に出現しない。
- ^ 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
- ^ Language Bindings - Qt Wiki
- ^ [1] Supported Qt modules in QtAda
- ^ [2] Supported Qt modules in lqt
- ^ 外部リンク
関連項目
外部リンク
- Qt
- 日本 Qt ユーザー会
- Qt Development Frameworks社の公式サイト(日本語)(2012年6月17日時点のアーカイブ)
- Qt Development Frameworks社の公式サイト(英語)(2012年7月22日時点のアーカイブ)
- SRAのQtサイト
- アイ・エス・ビーのQtサイト
- 日新システムズのQtサイト