Qt

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索
Qt
Image tile.png
Qt Designer 4 4 3.png
Qt designer を用いたGUI設計
開発元 トロールテック (1991-2008)
ノキア (2008-2011)
ディジア (2012-現在)
Qt Project (2011-現在)
初版 1992年(22年前) (1992
最新版 5.3.0 / 2014年05月20日(2か月前) (2014-05-20
最新評価版 5.3 beta / 2014年03月25日(4か月前) (2014-03-25
プログラミング言語 C++
対応OS FreeBSD · 組み込みLinux · Mac OS X · Windows · Linux/X11
Windows CE · Symbian · MeeGo · Amiga OS · Android · iOS
プラットフォーム クロスプラットフォーム
サポート状況 開発中
種別 アプリケーションフレームワーク
ライセンス GNU GPL[1] 3.0, with Qt special exception
GNU LGPL[2] 2.1
Commercial Developer License[3]
公式サイト qt-project.orgqt.digia.com
テンプレートを表示

Qt(キュート)はC++言語で書かれたアプリケーションユーザインタフェース (UI) フレームワークである。GUIツールキットとして広く知られているQtであるが、コンソールツールやサーバのような非GUIプログラムでも広く使用されている。ディジアの一部門Qtデベロップメントフレームワークスによって開発されている。

Qt は、キュート /ˈkjuːt/と発音する。また、非公式ではあるがキュー・ティーと発音されることもよくある。

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

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

日本の Qt コミュニティには、日本 Qt ユーザー会などがあり、Qt に関する情報交換、交流の場になっている。また、公式のコミュニティサイト Qt Projectでは、Qt に関するドキュメント、フォーラム、ウィキ、グループなどのサービスが提供されており、英語の他に日本語などの言語にも対応している。

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といった最新技術にも対応している他、日本語を含む多バイト文字入力フレームワークへも対応している[5]

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

商用版[編集]

商用版の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[9]
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コントロールの描画を行い、そのような問題によって苦しめられることも少なくなった。[10]

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

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[11]にもとづくスクリプトAPI[12]が外部のライブラリとしてではなく、Qtのコアに統合されるようになった。

バインダ[編集]

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

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[14] 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[15] 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フォルダで以下を実行
    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 が用意されている。また 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. ^ ただし、初期バージョンにおいては、日本語を含む多バイト文字入力フレームワークへの対応が遅れていたため、日本での普及が遅れるという結果となった。
  6. ^ http://www.digia.com/en/Home/Company/News/Digia-to-acquire-Qt-from-Nokia/
  7. ^ http://blog.qt.nokia.com/2012/08/09/investment-in-qt-planned-to-continue-digia/
  8. ^ 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/
  9. ^ [1]
  10. ^ 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.'
  11. ^ QSA 1.2: Qt Script for Applications
  12. ^ Qt 4.3: QtScript Module
  13. ^ QT Language Bindings
  14. ^ [2] Supported Qt modules in QtAda
  15. ^ [3] Supported Qt modules in lqt

関連項目[編集]

外部リンク[編集]