Qt GUI 概要
Qt GUI モジュールは、ウィンドウシステムとの統合、イベント処理、OpenGLおよびOpenGL ESとの統合、2Dグラフィックス、基本的な画像処理、フォント、テキストのためのクラスを提供します。これらのクラスはQtのユーザーインターフェース技術によって内部的に使用されていますが、例えば低レベルのOpenGL ESグラフィックスAPIを使用してアプリケーションを作成する場合など、直接利用することも可能です。
ユーザーインターフェースを作成するアプリケーション開発者向けに、Qt は、Qt GUI モジュールに含まれるイネーブラーよりもはるかに適した、Qt Quick などの高レベルな API を提供しています。
アプリケーションウィンドウ
Qt GUI モジュールで最も重要なクラスは、QGuiApplication とQWindow です。画面にコンテンツを表示したいQtアプリケーションは、これらを使用する必要があります。QGuiApplication にはメインイベントループが含まれており、ウィンドウシステムやその他のソースからのすべてのイベントがここで処理され、ディスパッチされます。また、アプリケーションの初期化と終了処理も担当します。
QWindow クラスは、基盤となるウィンドウシステム上のウィンドウを表します。このクラスは、タッチ入力、エクスポージャー、フォーカス、キーストローク、ジオメトリの変更など、ウィンドウシステムからのイベント(QEvent )を処理するための多数の仮想関数を提供します。
2D グラフィックス
Qt GUI モジュールには、2Dグラフィックス、画像処理、フォント、および高度な組版のためのクラスが含まれています。
surface タイプ `QSurface::RasterSurface ` で作成された `QWindow ` は、Qt の高度に最適化された 2D ベクターグラフィックス API である `QBackingStore ` および `QPainter` と組み合わせて使用できます。`QPainter ` は、線、多角形、ベクターパス、画像、およびテキストの描画をサポートしています。詳細については、「ペイントシステム」および「ラスターウィンドウの例」を参照してください。
Qtでは、QImage およびQPixmap クラスを使用して画像を読み込んだり保存したりできます。デフォルトで、QtはJPEGやPNGなど、最も一般的な画像形式をサポートしています。ユーザーはQImageIOPlugin クラスを介して、追加の形式のサポートを追加することができます。詳細については、「画像ファイルの読み書き」を参照してください。
Qt における組版は、QTextDocument によって行われます。これは、QPainter API を、主にQFont といった Qt のフォントクラスと組み合わせて使用します。テキストやフォントの処理において、より低レベルの API を好むアプリケーションでは、QRawFont やQGlyphRun といったクラスを使用できます。
RHI グラフィックス
Qt Rendering Hardware Interface(RHI)は、OpenGL、OpenGL ES、Direct3D、Metal、Vulkanなどのハードウェアアクセラレーション対応グラフィックスAPIを抽象化したものです。
QWindow へのレンダリングにOpenGLやVulkanを直接使用する代わりに、QRhi および関連クラスは、シェーダーの条件処理およびトランスパイルパイプラインによって補完された、移植性が高くクロスプラットフォームな3DグラフィックスおよびコンピューティングAPIを提供します。これにより、アプリケーションは単一の、場合によってはベンダーやプラットフォーム固有の3D APIに直接依存することを回避できます。
以下に、RHIに関連する主要なクラスの一覧を示します。これらに加え、多数の追加クラスや構造体も用意されています。
- QRhi
- QShader
- QShaderDescription
- QRhiCommandBuffer
- QRhiResourceUpdateBatch
- QRhiBuffer
- QRhiRenderBuffer
- QRhiTexture
- QRhiSampler
- QRhiShadingRateMap
- QRhiTextureRenderTarget
- QRhiShaderResourceBindings
- QRhiGraphicsPipeline
- QRhiComputePipeline
- QRhiSwapChain
QRhi を使用して、QWindow 上で高速化された 3D レンダリングを実行する、移植性のあるクロスプラットフォーム・アプリケーションを作成する入門例については、「RHI Window Example」を参照してください。
QWindow を直接操作することは、QRhi API を用いたレンダリングにおいて最も高度で、多くの場合最も柔軟な方法です。しかし、これは最も低レベルなアプローチであり、QtのUI技術、ウィジェット、およびQt Quick が一切利用されないという点で制限があります。 多くの場合、アプリケーションでは、QRhi ベースのレンダリングを、ウィジェットやQt Quick ベースのユーザーインターフェースに統合することを望むでしょう。QWidget ベースのアプリケーションでは、QWidget::createWindowContainer() を使用してウィンドウをウィジェット階層にネイティブの子要素として埋め込むことも可能ですが、多くの場合、QRhiWidget を使用することで、QRhi ベースのレンダリングをウィジェット UI に統合するためのより便利な手段が提供されます。Qt Quick は、QRhi ベースのカスタムレンダリングで 2D/3D シーンを拡張するための独自の機能セットを提供しています。
注: RHI ファミリーの APIは 、通常の Qt 公開 API とは異なり、現在、互換性の保証が限定的となっています。詳細については、QRhi を参照してください。
3D 行列およびベクトル演算
Qt GUI モジュールには、3D グラフィックスに関連する最も一般的な数学演算を支援するための数学クラスもいくつか含まれています。これらのクラスには、QMatrix4x4 、QVector2D 、QVector3D 、QVector4D 、およびQQuaternion が含まれます。
OpenGL および OpenGL ES との統合
QWindow は、プラットフォームの対応状況に応じて、OpenGLおよびOpenGL ESを使用したレンダリングをサポートしています。OpenGLレンダリングを有効にするには、QWindow のサーフェスタイプをQSurface::OpenGLSurface に設定し、QSurfaceFormat でフォーマット属性を選択した後、ネイティブのOpenGLコンテキストを管理するためのQOpenGLContext を作成します。 さらに、QtにはQOpenGLPaintDevice があり、これによりOpenGLアクセラレーションによるQPainter レンダリングが可能になります。また、OpenGLコードの記述を簡素化し、拡張機能の処理の複雑さやOpenGL ES 2とデスクトップOpenGLの違いを隠蔽する利便性クラスも用意されています。 これらの利便性向上のためのクラスには、QOpenGLFunctions が含まれており、これによりアプリケーションは、OpenGL関数ポインタを手動で解決することなく、デスクトップ版OpenGL上でOpenGL ES 2のすべての関数を使用できるようになります。これにより、モバイルや組み込みデバイスを対象としたアプリケーションのクロスプラットフォーム開発が可能になり、ネイティブのOpenGL機能をよりシンプルなQt APIでラップしたクラスが提供されます:
- QOpenGLBuffer
- QOpenGLFramebufferObject
- QOpenGLShaderProgram
- QOpenGLTexture
- QOpenGLDebugLogger
- QOpenGLTimerQuery
- QOpenGLVertexArrayObject
最後に、OpenGLの新しいバージョン(3.0以降)をより適切にサポートするため、バージョン管理された関数ラッパーの仕組みも利用可能です: QOpenGLFunction_N_N クラスのファミリーは、特定の OpenGL バージョンおよびプロファイルのすべての関数を公開しており、最新のデスクトップ専用 OpenGL 機能に依存するデスクトップアプリケーションを容易に開発できるようになります。
詳細については、「OpenGL ウィンドウの例」を参照してください。
QSurface::OpenGLSurface で作成されたQWindow は、QPainter およびQOpenGLPaintDevice と組み合わせて使用することで、画質を多少犠牲にする代わりに、OpenGLによるハードウェアアクセラレーションされた2Dグラフィックスを実現できます。
Vulkanの統合
Qt GUI はVulkanAPIをサポートしています。Qtアプリケーションでは、LunarG Vulkan SDKがインストールされている必要があります。
Windows では、この SDK によって環境変数 `VULKAN_SDK` が設定され、configure スクリプトによってこれが検出されます。
Androidでは、NDKのAPIレベル24でVulkanヘッダーが追加されました。
低レベルのVulkanサポートに関連する主なクラスは以下の通りです:
さらに、QVulkanWindow には、QWindow をターゲットとしたVulkanベースのレンダリングの実装を容易にする、QWindow の便利なサブクラスが提供されています。このヘルパークラスの使用は完全に任意です。より高度なVulkanベースのレンダラーを持つアプリケーションでは、代わりにQSurface::VulkanSurface 型を持つQWindow を直接使用することを推奨します。
詳細については、「Hello Vulkan Widget」サンプルおよび「Hello Vulkan Triangle」サンプルを参照してください。
ドラッグ&ドロップ
Qt GUI ドラッグ&ドロップのサポートが含まれています。詳細については、「ドラッグ&ドロップの概要」を参照してください。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.