Qt(キュート)とは
Qtは、The Qt CompanyとQt Projectによって開発されている
クロスプラットフォームアプリケーションフレームワークです。GUIツールキットとして広く知られていますが、コンソールアプリケーションや
サーバー
ソフトウェアといった非GUIプログラムの開発にも利用されています。発音は公式には「キュート」であり、「キューティー」と発音されることもありますが、これは誤りです。
Qtには商用版とオープンソース版があり、オープンソース版はLGPLおよびGPLの
ライセンスで提供されています。商用版を購入すると、Qt商用
ライセンスを利用して
ソフトウェアを開発できます。LGPL版はQt 4.5から提供が開始され、これにより営利企業でもQtをより利用しやすくなりました。
特徴
Qtは
C++で開発されており、単一の
ソースコードでWindows、macOS、
LinuxなどのX Window System、
組み込みシステムなど、様々なプラットフォーム上で動作するアプリケーションを開発できます。また、コミュニティによって多言語バインディングが開発されており、
Java (Qt Jambi)、
Ruby、
Python、
Perl、C#などからもQtを利用可能です。
Qtは開発が容易であり、高速かつ洗練されたUI/UXを実現できるため、オープンソースアプリケーションだけでなく、商業アプリケーションにも多く採用されています。
OpenGL、SVG、XMLなどの最新技術に対応しているほか、日本語を含む多バイト文字入力にも対応しています。
オープンソース版
オープンソース版にはGPLまたはLGPLが適用されます。LGPLはバージョン4.5から適用可能です。Windows、macOS、多くの
Unix系OS、Embedded
Linux、Windows CE、Symbian向けにパッケージが配布されています。
設計
Qtはモジュール化されており、必要な機能だけを組み合わせて利用できます。以下に主要なモジュールをいくつか紹介します。
Qt Essentials
Qt Core: GUI以外のコアとなるクラス群を提供します。
Qt Gui: GUIの中心となる
クラス群を提供します。
OpenGLも含まれます。
Qt Multimedia: 音楽、動画、カメラなどのマルチメディア機能を実装します。
Qt Multimedia Widgets: マルチメディア機能を実現するウィジェット群を提供します。
Qt Network: ネットワークプログラミングを容易にするクラス群を提供します。
Qt QML: QMLと
JavaScriptに関する
クラスを提供します。
Qt Quick: カスタムUIを備えた動的なアプリケーションを構築するためのフレームワークです。
Qt Quick Controls: デスクトップ風のUIを作成するためのQt QuickベースのUIコントロール群です。
Qt Quick Dialogs: Qt Quickアプリケーションにシステムダイアログを提供します。
Qt Quick Layouts: UIでQt Quick 2ベースのアイテムを使用するためのレイアウトを提供します。
Qt SQL: SQLを使用するデータベースのためのクラス群を提供します。
Qt Test: Qtアプリケーションと
ライブラリのユニットテストのための
クラス群を提供します。
Qt Widgets: C++ウィジェットでQt Guiを拡張するためのクラス群を提供します。
Qt Add-Ons
Active Qt: Windowsで
ActiveXやCOMを使用するアプリケーションのための
クラス群を提供します。
Qt 3D: 2Dおよび3Dレンダリングをサポートするリアルタイムシミュレーションシステムのための機能を提供します。
Qt Android Extras: Android固有の機能を使用するためのAPIを提供します。
Qt Bluetooth: Bluetoothハードウェアへのアクセスを提供します。
Qt Canvas 3D:
JavaScriptを使用してQt Quickアプリケーションから
OpenGL風の3D描画を可能にします。
Qt Concurrent: 低レベルな操作なしにマルチスレッドプログラムを書くためのクラス群を提供します。
Qt D-Bus: D-Busプロトコルを使用したプロセス間通信のための
クラス群を提供します。
Qt Gamepad: Qtアプリケーションでのゲームパッドハードウェアのサポートを可能にします。
Qt Graphical Effects: Qt Quick 2で使用するためのグラフィカルエフェクトを提供します。
Qt Image Formats: Qt Guiでサポートされていない画像フォーマットのためのプラグイン群を提供します。
Qt Location: QMLアプリケーションで地図の表示、道案内、コンテンツ配置機能を提供します。
Qt Mac Extras: macOS固有の機能を使用するためのAPIを提供します。
Qt NFC: NFCハードウェアへのアクセスを提供します。
Qt Positioning: スマートフォンなどで位置情報を提供します。
Qt Print Support: 印刷を容易にするための
クラス群を提供します。
Qt Purchasing: Qtアプリケーションでのアプリ内課金を可能にします。
Qt Sensors: センサーハードウェアへのアクセスとモーションジェスチャーの認識を提供します。
Qt Serial Port: ハードウェアおよび仮想シリアルポートへのアクセスを提供します。
Qt SVG: SVGファイルの内容を表示する
クラスを提供します。SVG 1.2 Tinyをサポートします。
Qt WebEngine: アプリケーションにウェブコンテンツを埋め込むためのクラスと関数群を提供します。
Qt WebView: QMLアプリケーションで、プラットフォームのネイティブAPIを使用してウェブコンテンツを表示します。完全なウェブレンダリングエンジンをアプリケーションに含める必要はありません。
Qt Windows Extras: Windows固有の機能を使用するためのAPIを提供します。
Qt X11 Extras: X11固有の機能を使用するためのAPIを提供します。
Qt XML: SAXおよびDOMインターフェースを実装します。
ネイティブUI描画APIの使用
かつてのQtは、プラットフォームのネイティブな見た目をエミュレートしていましたが、最新バージョンでは各プラットフォームのネイティブAPIを使用してQtコントロールを描画するため、エミュレーションの不一致による問題は解消されています。
メタオブジェクトコンパイラ (moc)
mocは、Qtプログラムのソースコードを入力として実行されるツールです。C++ソースコードにマクロを記述することで、mocがメタ情報と追加のC++コードを出力します。このシステムにより、シグナル&スロットシステム、メタプログラミング、非同期関数呼び出しなどを簡単に利用できます。
シグナル&スロット
オブジェクト間のコミュニケーションを容易にするための仕組みです。あるオブジェクトがシグナルを発信すると、そのシグナルに接続されたオブジェクトのスロット(関数)が呼び出されます。発信側は受信側を知る必要がなく、インクルード関係をシンプルに保つことができます。
バインディング
Qtは様々な言語用のバインディングを持ち、各言語からQtの機能を利用できるようにしています。
Qtによるhello world
以下はQtを用いた簡単なHello Worldプログラムの例です。
cpp
include
include
int main(int argc, char argv[]) {
QApplication app(argc, argv);
QLabel
label = new QLabel("Hello, Qt!");
label->show();
return app.exec();
}
コンパイルと実行の手順
1. `Hello`フォルダを作成
2. 上記のコードを`Hello.cpp`として`Hello`フォルダに保存
3. `Hello`フォルダで以下のコマンドを実行
`qmake -project`
`qmake`
`make` (または `gmake` や `nmake`。OSおよび
コンパイラにより異なる)
4. 実行:`./release/Hello` (Windowsの場合は `release\Hello.exe`)
開発環境・デザインツール
Qtには、統合開発環境のQt Creator、GUIエディタのQt Designer、翻訳支援ツールのQt Linguist、リファレンスドキュメントビューアのQt Assistantなどの開発支援ツールが付属しています。これらのツールを使用することで、効率的な開発が可能です。また、Visual Studio Add-inやQt Eclipse Integrationも提供されており、Visual StudioやEclipseでの開発も可能です。
歴史
Qtは、1991年にQuasar Technologies社のHaavard NordとEirik Chambe-Engによって開発が開始されました。当初の社名はTroll Tech社、後にTrolltech社へと変更されています。Qtという名前は、Haavardが使っていた
Emacsのフォントの中でQが最も美しく見えたことと、tがtoolkitの略であることに由来しています。
1998年頃、
KDEが
Linuxで主要な
デスクトップ環境になったことで、
KDEがQtベースで開発されていることが、
ライセンス上の問題を引き起こしました。当時Qtの
ライセンスはQ Public License (QPL)であり、Free Software FoundationはQPLがGPLと矛盾する
ライセンスであると指摘しました。この問題を解決するため、
KDE Free Qt Foundationが設立され、QtはQPLとGPLのデュアル
ライセンスで配布されることになりました。また、将来的にTrolltechがQtの開発を継続できなくなった場合でも、
KDE Free Qt FoundationがQtの開発を継続することが保証されるようになりました。
初期バージョンでは、
UNIXとWindowsプラットフォームがサポートされていました。2001年末にリリースされたバージョン3.0から、macOSもサポート対象となりました。2005年6月にはQt 4がリリースされ、WindowsでもQtをGPLで利用できるようになり、すべてのプラットフォームでGPLのフリーオープンソースアプリケーションを開発できるようになりました。このバージョンから、機能ごとにモジュールが分割されました。2009年3月には、LGPLが適用されるバージョン4.5が発表されました。これにより、プロプライエタリ
ソフトウェアでのQtの利用がより容易になりました。
2012年8月9日には、DigiaがNokiaからQtを買収しました。これにより、Android、iOS、Windows 8への対応が加速されました。
Qtは、
KDE Plasma、VLC media player、
Google Earthなど、多くの
ソフトウェアで使用されています。
Qtを利用できるプログラミング言語
Qtは
C++をメインの開発言語としていますが、多数のプログラミング言語バインディングも存在します。
node-qt: Node.jsバインディング
PyQt:
Pythonバインディング (GPL)
PySide: Pythonバインディング (LGPL)
Qt
Ruby:
Rubyバインディング
RingQt: Ring用Qtバインディング
外部リンク
組み込み&デスクトップ向けクロスプラットフォームソフトウェア開発|Qt 公式ウェブサイト
Qt Blog (日本語ページ)
日本 Qt ユーザー会
(代理店) SRAのQtサイト
(代理店) アイ・エス・ビーのQtサイト