
Qt(キュート)は、デスクトップから組込機器、モバイル、車載インフォテイメントまで動作するクロスプラットフォームのアプリケーション開発フレームワークです。1995年にノルウェーのTrolltechが商用と自由ソフトの両ライセンスで公開し、その後Nokia、Digiaを経て現在はThe Qt Companyが商標と商用版を管理しています。中核はC++ライブラリですが、UI記述言語QML、JavaScript連携、Pythonバインディング(PySide6/PyQt6)、さまざまな組込OS対応など、現代のクロスプラットフォームGUI開発を語るうえで欠かせない存在です。
この記事の目次
- Qtの主要モジュール構成
- シグナルとスロットによるイベント駆動
- Qtを採用する代表的なアプリ
- PySideやQML、最新Qt 6の方向性
- まとめ
Qtの主要モジュール構成

Qtは多くのモジュールに分かれており、Qt CoreにはQObjectやシグナル/スロット、QString、QFile、コンテナクラスなどフレームワーク全体の基盤が含まれます。Qt WidgetsはWindowsやmacOSのネイティブ風UIに近いデスクトップ向けUIを構築するモジュールで、QPushButton、QLineEdit、QTableViewなどのコントロールを使ってMVCパターンを組みます。長年Qtといえばこのウィジェット系の印象が強いです。
Qt QuickはQMLという宣言的UI記述言語を中心に置いた現代的なUIモジュールで、ハードウェアアクセラレーションされた滑らかなアニメーションが特徴です。タッチ操作とアニメーションを重視するモバイル/組込/車載HMI向けに広く採用されています。さらにQt NetworkでHTTPやWebSocket、Qt SqlでSQLite/PostgreSQL/MySQL連携、Qt Multimediaでメディア再生、Qt Bluetooth、Qt SerialBusといった専門モジュールも提供されます。
シグナルとスロットによるイベント駆動

Qtの中核思想がシグナルとスロットの仕組みで、ボタンが押されたという出来事(シグナル)と、それを処理する関数(スロット)を疎結合に接続できます。QObject::connectで「sender→signal→receiver→slot」を結びつけ、片方のオブジェクトはもう一方の型を知らなくても通信が成立します。これはコールバック関数の登録に似ていますが、メタオブジェクトコンパイラ(moc)が裏で型情報を検査し、スレッドをまたいだ通知や非同期実行も自然に扱えます。
シグナルとスロットの導入によりUIコードはモジュール化しやすく、テストや変更が容易になります。たとえばモデル側でデータ変更シグナルを発火し、ビュー側のスロットがそれを受けて再描画する、というMVVMに近い設計を自然に書けます。Qt 5以降では関数ポインタ構文(&MyClass::slotName)でコンパイル時に型チェックされるようになり、文字列ベースの古いSIGNAL/SLOTマクロより安全性が高まりました。
Qtを採用する代表的なアプリ

Qtの採用例は枚挙にいとまがなく、デスクトップ環境KDE Plasmaは設計思想から完全にQtベースです。マルチプラットフォームのメディアプレイヤーVLC、3DCGソフトAutodesk Maya、Adobe Photoshop Elements、Wireshark、Avogadro、KritaなどクリエイティブからネットワークまでQt製アプリが揃います。Telegramのデスクトップクライアントや初期のSkype、Spotifyの旧版もQtを使用していました。
車載分野ではTeslaのインフォテイメントUI、メルセデス・ベンツのMBUX、ボルボや日産のHMIにQtが採用されています。家電やヘルスケア機器の操作パネル、産業用ロボットのGUI、医療機器のディスプレイなど組込分野でも幅広く使われ、The Qt Companyは「設計から保守までトータルにサポート」する商用ライセンスを企業向けに提供しています。OSSのLGPLv3でも利用可能ですが、商用利用や静的リンクの要件によってはライセンス検討が必要です。
PySideやQML、最新Qt 6の方向性

QtはC++が主役ですが、Python連携も活発でPySide6(公式)、PyQt6(Riverbank)といったバインディングを通じて、Pythonからフル機能のGUIを書けます。データ分析や科学計算アプリで人気が高く、Anacondaのナビゲータ、Spyder IDE、Picard(MusicBrainzタグ付け)などがPySide/PyQt製です。Pythonから入ってQMLで宣言的UIを書く、というハイブリッドな構成も自然に成立します。
Qt 6は2020年末にリリースされ、C++17を必須にし、グラフィックスバックエンドをRHI(Rendering Hardware Interface)として抽象化、Vulkan・Metal・Direct3Dへのネイティブ対応、QMLのコンパイル時型チェック強化などが進みました。Qt 6.5でWebAssembly対応が安定し、ブラウザ上でQtアプリを動かす道筋もできています。長期サポート(LTS)版は商用顧客向け中心で、コミュニティ版は新機能の早期試用に向きます。
まとめ
QtはC++を中心にしたクロスプラットフォームGUIの代表格で、シグナル/スロットによるエレガントなイベント駆動、QMLによる現代的UI記述、Python連携の豊富さで開発者を惹きつけてきました。デスクトップからモバイル、車載、組込、ブラウザ(WebAssembly)まで広がる対応プラットフォームと、KDEからTeslaまで多彩な採用実績は他に類を見ません。GUIアプリを長く保守したい案件で、有力候補として常に挙がるフレームワークです。
※本記事はIT用語辞典の手書きドラフトです。公開前に最新情報・出典を確認のうえ加筆修正してください。

コメント