コンテンツにスキップ

英文维基 | 中文维基 | 日文维基 | 草榴社区

「Qt」の版間の差分

出典: フリー百科事典『ウィキペディア(Wikipedia)』
削除された内容 追加された内容
Iwai.masaharu (会話 | 投稿記録)
Cewbot (会話 | 投稿記録)
m Bot作業依頼:インターネットアーカイブ - log
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
Qt designer を用いたGUI設計
開発元 トロールテック (1991-2008)
ノキア (2008-2011)
ディジア (2012-現在)
Qt Project (2011-現在)
初版 1992年 (32年前) (1992)
最新版
5.9
  / 2017年5月31日 (7年前) (2017-05-31)
[1]
最新評価版
5.8 Alpha
  / 2016年9月5日 (8年前) (2016-09-05)
[2]
リポジトリ ウィキデータを編集
プログラミング
言語
C++
対応OS FreeBSD · 組み込みLinux · macOS · Windows · Linux/X11
Windows CE · Symbian · MeeGo · Amiga OS · Android · iOS
プラットフォーム クロスプラットフォーム
サポート状況 開発中
種別 アプリケーションフレームワーク
ライセンス GNU GPL[3] 3.0, with Qt special exception
GNU LGPL[4] 2.1
Commercial Developer License[5]
公式サイト www.qt.io
テンプレートを表示

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

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

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

2012年8月9日にディジアがノキアからQtを買収した[8]AndroidiOSWindows 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は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ベースのレイアウトエンジンであり、ウェブコンテンツの描画およびアクセスのためのクラスを提供する。5.6でQtWebEngine[11]へ移行。QtWebKitも当分の間は存続が決定している。
QtXml
QtXmlはSAXおよびDOMインターフェイスを実装し、QtのXMLパーサとして機能する。
QtXmlPatterns
QtXmlPatternsはXPathXQueryXSLTXML 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 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フォルダで以下を実行
    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社(当時)が日本語パッチを特別に認めることにより解決した。

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

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

脚注

  1. ^ Lars Knoll (2017年5月31日). “Qt 5.9 released”. 2017年6月6日閲覧。
  2. ^ Lars Knoll (2016年9月5日). “Qt 5.8 Alpha Released”. Qt Project. 2016年10月16日閲覧。
  3. ^ Qt GNU GPL v. 3.0 Version”. 2011年6月22日閲覧。
  4. ^ Qt GNU LGPL v. 2.1 Version”. 2011年6月22日閲覧。
  5. ^ Qt Commercial Developer License”. 2010年2月19日閲覧。
  6. ^ 初期においては独自ライセンスのQPL(Qt3.0までの商用ライセンス)がGPLと衝突する問題が生じたが、オープンソース版をGNU GPLの下でも公開して、この問題は解消された。また現在はライセンスとして商用ライセンス、GPL、LGPLの3つが用意されており、このようなライセンス上の問題はない。
  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. ^ Blinkを参考にした仕様だが、タブX個・イコール・バックグラウンドプロセスX個にメモリ使用量が限定されており、Blinkのように複数のプロセスが同時に出現しない。
  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. ^ Language Bindings - Qt Wiki
  16. ^ [1] Supported Qt modules in QtAda
  17. ^ [2] Supported Qt modules in lqt
  18. ^ 外部リンク

関連項目

外部リンク