Qt GUIの概要
Qt GUIモジュールは、ウィンドウシステムの統合、イベント処理、OpenGLとOpenGL ESの統合、2Dグラフィックス、基本的な画像処理、フォント、テキストのクラスを提供します。これらのクラスはQtのユーザーインターフェイス技術によって内部的に使用されますが、例えば、低レベルのOpenGL ESグラフィックスAPIを使用するアプリケーションを書くために直接使用することもできます。
ユーザインタフェースを書くアプリケーション開発者のために、Qt GUIモジュールにあるイネーブラよりもはるかに適したQt Quickのような高レベルのAPIをQtは提供しています。
アプリケーションウィンドウ
Qt GUI モジュールで最も重要なクラスはQGuiApplication とQWindow です。Qt GUI モジュールで最も重要なクラスは、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 ベースのユーザーインターフェイスに統合したいと考えるでしょう。QWidgetQt Quick ベースのアプリケーションは、QWidget::createWindowContainer() を使用して、ウィンドウをネイティブの子としてウィジェット階層に埋め込むこともできますが、多くの場合、QRhiWidget は、QRhi ベースのレンダリングをウィジェットの UI に統合する、より便利なイネーブラを提供します。Qt Quick は、2D/3D シーンをQRhi ベースのカスタムレンダリングで拡張するための独自のイネーブラを提供します。
注意: 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 はドラッグ&ドロップをサポートしています。ドラッグ&ドロップの概要に詳細があります。
©2024 The Qt Company Ltd. 本書に含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。