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 グラフィックス、画像処理、フォント、および高度なタイポグラフィ用のクラスが含まれています。
サーフェス型QSurface::RasterSurface で作成されたQWindow は、Qt の高度に最適化された 2D ベクターグラフィックス API であるQBackingStore やQPainter と組み合わせて使用することができます。QPainter は、線、多角形、ベクターパス、画像、テキストの描画をサポートしています。詳細は、ペイントシステムとラスターウィンドウの例を参照してください。
Qt では、QImage とQPixmap クラスを使用して、画像の読み込みと保存ができます。デフォルトでは、Qt は JPEG や PNG などの最も一般的な画像フォーマットをサポートしています。ユーザは、QImageIOPlugin クラスを使用して、その他のフォーマットのサポートを追加することができます。詳しくは、画像ファイルの読み書きを参照してください。
Qt での組版は、QTextDocument を使って行います。QPainter API と Qt のフォントクラス(主にQFont )を組み合わせて使います。テキストやフォントの処理にもっと低レベルの API を使いたいアプリケーションは、QRawFont やQGlyphRun のようなクラスを使うことができます。
RHI グラフィックス
Qt Rendering Hardware Interface は、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
- 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レンダリングは、 のサーフェスタイプを に設定し、 でフォーマット属性を選択し、 を作成してネイティブOpenGLコンテキストを管理することで有効になります。さらに、Qt には があり、OpenGL アクセラレーテッド レンダリングの使用が可能です。また、OpenGL コードの記述を簡素化し、拡張子処理の複雑さやOpenGL ES 2 とデスクトップOpenGL の違いを隠す便利なクラスもあります。便利なクラスには、アプリケーションがOpenGL関数ポインタを手動で解決することなく、デスクトップOpenGL上のすべてのOpenGL ES 2関数を使用できるようにする 。これにより、モバイルデバイスや組み込みデバイスをターゲットとしたアプリケーションのクロスプラットフォーム開発が可能になり、ネイティブのOpenGL機能をよりシンプルなQt APIでラップするクラスを提供します:QWindow QSurface::OpenGLSurface QSurfaceFormat QOpenGLContext QOpenGLPaintDevice QPainter QOpenGLFunctions
- QOpenGLBuffer
- QOpenGLFramebufferObject
- QOpenGLShaderProgram
- QOpenGLTexture
- QOpenGLDebugLogger
- QOpenGLTimerQuery
- QOpenGLVertexArrayObject
最後に、OpenGLの新しいバージョン(3.0以上)へのより良いサポートを提供するために、バージョン管理された関数ラッパーのメカニズムも用意されています:QOpenGLFunction_N_Nファミリーのクラスは、与えられたOpenGLバージョンとプロファイルのすべての関数を公開しており、最新のデスクトップ専用のOpenGL機能に依存するデスクトップアプリケーションを簡単に開発することができます。
詳細については、OpenGL Window Exampleを参照してください。
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 Exampleと Hello Vulkan Triangle Exampleを参照してください。
ドラッグ アンド ドロップ
Qt GUI にはドラッグ&ドロップのサポートが含まれます。詳細はDrag and Drop の概要を参照してください。
© 2025 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.