このページでは

QQuickWindow Class

QQuickWindow クラスは、グラフィカルな QML シーンを表示するためのウィンドウを提供します。詳細...

ヘッダー: #include <QQuickWindow>
CMake: find_package(Qt6 REQUIRED COMPONENTS Quick)
target_link_libraries(mytarget PRIVATE Qt6::Quick)
qmake: QT += quick
QML内: Window
継承元: QWindow
継承元:

QQuickView

パブリック型

struct GraphicsStateInfo
enum CreateTextureOption { TextureHasAlphaChannel, TextureHasMipmaps, TextureOwnsGLTexture, TextureCanUseAtlas, TextureIsOpaque }
flags CreateTextureOptions
enum RenderStage { BeforeSynchronizingStage, AfterSynchronizingStage, BeforeRenderingStage, AfterRenderingStage, AfterSwapStage, NoStage }
enum SceneGraphError { ContextNotAvailable }
enum TextRenderType { QtTextRendering, NativeTextRendering, CurveTextRendering }

プロパティ

パブリック関数

QQuickWindow(QQuickRenderControl *control)
QQuickWindow(QWindow *parent = nullptr)
virtual ~QQuickWindow() override
QQuickItem *activeFocusItem() const
void beginExternalCommands()
QColor color() const
QQuickItem *contentItem() const
QSGImageNode *createImageNode() const
QSGNinePatchNode *createNinePatchNode() const
QSGRectangleNode *createRectangleNode() const
(since 6.7) QSGTextNode *createTextNode() const
QSGTexture *createTextureFromImage(const QImage &image, QQuickWindow::CreateTextureOptions options) const
QSGTexture *createTextureFromImage(const QImage &image) const
(since 6.6) QSGTexture *createTextureFromRhiTexture(QRhiTexture *texture, QQuickWindow::CreateTextureOptions options = {}) const
qreal effectiveDevicePixelRatio() const
void endExternalCommands()
QImage grabWindow()
(since 6.0) QQuickGraphicsConfiguration graphicsConfiguration() const
(since 6.0) QQuickGraphicsDevice graphicsDevice() const
const QQuickWindow::GraphicsStateInfo &graphicsStateInfo()
QQmlIncubationController *incubationController() const
bool isPersistentGraphics() const
bool isPersistentSceneGraph() const
bool isSceneGraphInitialized() const
(since 6.0) QQuickRenderTarget renderTarget() const
QSGRendererInterface *rendererInterface() const
(since 6.6) QRhi *rhi() const
void scheduleRenderJob(QRunnable *job, QQuickWindow::RenderStage stage)
void setColor(const QColor &color)
(since 6.0) void setGraphicsConfiguration(const QQuickGraphicsConfiguration &config)
(since 6.0) void setGraphicsDevice(const QQuickGraphicsDevice &device)
void setPersistentGraphics(bool persistent)
void setPersistentSceneGraph(bool persistent)
(since 6.0) void setRenderTarget(const QQuickRenderTarget &target)
(since 6.6) QRhiSwapChain *swapChain() const

再実装されたパブリック関数

virtual QAccessibleInterface *accessibleRoot() const override

パブリックスロット

void releaseResources()
void update()

シグナル

void activeFocusItemChanged()
void afterAnimating()
(since 6.0) void afterFrameEnd()
void afterRenderPassRecording()
void afterRendering()
void afterSynchronizing()
(since 6.0) void beforeFrameBegin()
void beforeRenderPassRecording()
void beforeRendering()
void beforeSynchronizing()
void colorChanged(const QColor &)
(since 6.11) void devicePixelRatioChanged()
void frameSwapped()
void sceneGraphAboutToStop()
void sceneGraphError(QQuickWindow::SceneGraphError error, const QString &message)
void sceneGraphInitialized()
void sceneGraphInvalidated()

静的パブリックメンバー

(since 6.0) QSGRendererInterface::GraphicsApi graphicsApi()
bool hasDefaultAlphaBuffer()
QString sceneGraphBackend()
void setDefaultAlphaBuffer(bool useAlpha)
(since 6.0) void setGraphicsApi(QSGRendererInterface::GraphicsApi api)
void setSceneGraphBackend(const QString &backend)
void setTextRenderType(QQuickWindow::TextRenderType renderType)
QQuickWindow::TextRenderType textRenderType()

再実装されたプロテクト関数

virtual void closeEvent(QCloseEvent *e) override
virtual bool event(QEvent *event) override
virtual void exposeEvent(QExposeEvent *) override
virtual void focusInEvent(QFocusEvent *ev) override
virtual void focusOutEvent(QFocusEvent *ev) override
virtual void hideEvent(QHideEvent *) override
virtual void keyPressEvent(QKeyEvent *e) override
virtual void keyReleaseEvent(QKeyEvent *e) override
virtual void mouseDoubleClickEvent(QMouseEvent *event) override
virtual void mouseMoveEvent(QMouseEvent *event) override
virtual void mousePressEvent(QMouseEvent *event) override
virtual void mouseReleaseEvent(QMouseEvent *event) override
virtual void resizeEvent(QResizeEvent *ev) override
virtual void showEvent(QShowEvent *) override
virtual void tabletEvent(QTabletEvent *event) override
virtual void wheelEvent(QWheelEvent *event) override

詳細な説明

QQuickWindow は、QQuickItem から構成されるシーンとの対話や表示に必要な、グラフィカルなシーン管理機能を提供します。

QQuickWindow には、常に 1 つの非表示のルートアイテムが存在します。このウィンドウにアイテムを追加するには、そのアイテムの親をルートアイテムまたはシーン内の既存のアイテムに変更します。

QML ファイルからシーンを簡単に表示するには、QQuickView を参照してください。

レンダリング

QQuickWindow は、レンダリング対象を表現するためにシーングラフを使用します。このシーングラフは QML シーンから切り離されており、プラットフォームの実装によっては別のスレッドで実行される場合もあります。レンダリング用シーングラフは QML シーンとは独立して存在するため、QML シーンの状態に影響を与えることなく完全に解放することも可能です。

sceneGraphInitialized() シグナルは、QML シーンが初めて画面にレンダリングされる前に、レンダリングスレッド上で発信されます。レンダリング用シーングラフが解放されている場合、次のフレームがレンダリングされる前に、このシグナルが再度発信されます。 画面上に表示されている QQuickWindow は、内部でrender loop によって駆動されており、シーングラフにはその実装が複数用意されています。シーングラフのレンダリングプロセスの詳細については、「Qt Quick シーングラフ」を参照してください。

デフォルトでは、QQuickWindow は OpenGL や Vulkan などのアクセラレーション対応 3D グラフィックス API を使用してレンダリングを行います。シーングラフのバックエンドおよびサポートされているグラフィックス API の詳細な概要については、「シーングラフの適応 (Scene Graph Adaptations)」を参照してください。

警告: グラフィックス操作およびシーングラフとのやり取りは、主に updatePaintNode() フェーズ中に、レンダリングスレッド上でのみ行われることが極めて重要です 。

警告: レンダリングに関連するシグナルの多くはレンダリングスレッドから発信されるため 、接続は `Qt::DirectConnection` を使用して行う必要があります。

アクセラレーション対応の 3D グラフィックス API との統合

QQuickWindow とその基盤となるシーングラフが同じ API を使用してレンダリングを行っている限り、OpenGL、Vulkan、Metal、または Direct3D 11 の呼び出しを QQuickWindow に直接統合することが可能です。 デバイスやコンテキストオブジェクトのハンドルなどのネイティブグラフィックスオブジェクトにアクセスするには、QSGRendererInterface を使用します。QSGRendererInterface のインスタンスは、rendererInterface()を呼び出すことでQQuickWindowから取得できます。この統合を可能にするのは、beforeRendering()、beforeRenderPassRecording()、afterRenderPassRecording()、および関連するシグナルです。これらにより、アンダーレイやオーバーレイのレンダリングが可能になります。 あるいは、QNativeInterface::QSGOpenGLTexture 、QNativeInterface::QSGVulkanTexture 、およびその他の類似のクラスを使用することで、既存のネイティブテクスチャや画像オブジェクトをQSGTexture でラップし、シーングラフで利用できるようになります。

アクセラレーションを使用しないレンダリング

限定的な、純粋なソフトウェアベースのレンダリングパスも利用可能です。software バックエンドでは、Qt Quick の機能の一部が利用できず、これらに依存するQMLアイテムはまったくレンダリングされません。一方で、これにより、3DグラフィックスAPIがまったく利用できないシステム上でも、QQuickWindowを機能させることが可能になります。 詳細については、「Qt Quick のソフトウェア適応」を参照してください。

レンダリング先の変更

QQuickWindowは、必ずしも画面上のネイティブウィンドウをバックエンドとして持つわけではありません。レンダリングは、特定のネイティブテクスチャなどのカスタムレンダリングターゲットをターゲットとするようにリダイレクトすることができます。これは、QQuickRenderControl クラスと、setRenderTarget()、setGraphicsDevice()、setGraphicsConfiguration()などの関数を組み合わせて実現されます。

この場合、QQuickWindowはシーンを表し、フレームをレンダリングするためのインフラストラクチャを提供します。これは、レンダリングループやネイティブウィンドウによって支えられているわけではありません。その代わりに、このケースではアプリケーションがレンダリングを制御し、事実上レンダリングループの役割を果たします。 これにより、画像シーケンスの生成、外部の3Dエンジンで使用するためのテクスチャへのレンダリング、あるいはVR環境内でのQt Quick コンテンツのレンダリングが可能になります。

リソース管理

QMLはパフォーマンス向上のために画像やシーングラフノードをキャッシュしようとしますが、メモリ不足の状況によっては、これらのリソースを積極的に解放する必要がある場合があります。releaseResources() 関数を使用すると、特定のリソース、特にキャッシュされており、後で必要になった際に再作成可能なリソースのクリーンアップを強制的に実行できます。

さらに、releaseResources() を呼び出すと、シーングラフ全体および関連するグラフィックスリソースが解放される場合があります。この場合、sceneGraphInvalidated() シグナルが発信されます。この動作は、setPersistentGraphics() およびsetPersistentSceneGraph() 関数によって制御されます。

注: QSG という接頭辞を持つすべてのクラスは 、シーングラフのレンダリングスレッド上でのみ使用する必要があります。詳細については、「シーングラフとレンダリング」を参照してください。

表示と可視性

QQuickWindowインスタンスがhide()またはsetVisible(false)によって意図的に非表示にされると、そのレンダリングは停止し、シーングラフやグラフィックコンテキストも解放される可能性があります。これは、setPersistentGraphics()およびsetPersistentSceneGraph()で設定された内容によって異なります。この点における挙動は、releaseResources()関数を明示的に呼び出した場合と同一です。 ウィンドウが非表示状態、つまりレンダリング不能状態になるのは、これ以外にもさまざまな要因によって起こり得ます。これはプラットフォームやウィンドウシステムによって異なります。たとえば、Windows では、ウィンドウを最小化するとレンダリングが停止します。 macOSでは、上にある他のウィンドウによってウィンドウが完全に隠されると、同様の挙動になります。Linux/X11では、この挙動はウィンドウマネージャに依存します。

OpenGL コンテキストとサーフェスフォーマット

setFormat() メンバー関数を呼び出すことで、すべての QQuickWindow に対してQSurfaceFormat を指定することは可能ですが、QML では Window およびApplicationWindow 要素を使用してウィンドウを作成することもできます。 この場合、ウィンドウインスタンスの作成にC++コードは関与しませんが、アプリケーションによっては、特定のOpenGLバージョンやプロファイルを要求するなど、特定のサーフェスフォーマットの値を設定したい場合があります。そのようなアプリケーションは、起動時に静的関数QSurfaceFormat::setDefaultFormat()を呼び出すことができます。指定されたフォーマットは、その後作成されるすべてのQuickウィンドウに使用されます。

Vulkanインスタンス

Vulkanを使用する場合、QQuickWindowはシーングラフによって内部的に作成・管理されるQVulkanInstance に自動的に関連付けられます。このため、すべてが自動的に行われるため、ほとんどのアプリケーションはVkInstance を用意することについて心配する必要がありません。高度なケースでは、特定の方法で設定するために、アプリケーションが独自のQVulkanInstance を作成したい場合があるかもしれません。それも可能です。 QQuickWindowの生成直後、表示する前にsetVulkanInstance()を呼び出すと、アプリケーションが提供したQVulkanInstance (およびその基盤となるVkInstance )が使用されます。QQuickRenderControl を介してリダイレクトする場合、QVulkanInstance は自動的に提供されず、アプリケーションが独自のものを提供し、それをQQuickWindowに関連付けることが求められます。

グラフィックスコンテキストとデバイス

シーングラフが初期化されると(通常はウィンドウが公開されたとき、あるいはリダイレクトされたレンダリングの場合はvia QQuickRenderControl で初期化が行われる)、レンダリングに必要なコンテキストまたはデバイスオブジェクトが自動的に作成されます。これには、OpenGLコンテキスト、Direct3Dデバイスおよびデバイスコンテキスト、VulkanおよびMetalデバイスが含まれます。これらは、後でアプリケーションコードからQSGRendererInterface を介して照会することも可能です。 GUIスレッド上ですべてのレンダリングを実行するbasic レンダリングループを使用する場合、表示されているすべてのQQuickWindowで同じコンテキストまたはデバイスが使用されます。threaded レンダリングループでは、各レンダリングスレッド、つまり各QQuickWindowに対して専用のコンテキストまたはデバイスオブジェクトが使用されます。一部のグラフィックスAPIでは、setGraphicsConfiguration()を通じてある程度のカスタマイズが可能です。 これにより、例えば、VkDevice で有効にするVulkan拡張機能のリストを指定することが可能になります。あるいは、QQuickWindowが独自にコンテキストやデバイスオブジェクトを構築するのではなく、既存のコンテキストやデバイスオブジェクトのセットをQQuickWindowが使用できるようにすることも可能です。これは、setGraphicsDevice()を通じて実現されます。

QQuickView 、QQuickRenderControl 、QQuickRenderTarget 、QQuickGraphicsDevice 、QQuickGraphicsConfiguration 、およびQSGRendererInterfaceも参照してください 。

メンバータイプのドキュメント

enum QQuickWindow::CreateTextureOption
flags QQuickWindow::CreateTextureOptions

CreateTextureOption 列挙型は、テクスチャのラップ方法をカスタマイズするために使用されます。

定数値説明
QQuickWindow::TextureHasAlphaChannel0x0001テクスチャにはアルファチャンネルがあり、ブレンディングを使用して描画する必要があります。
QQuickWindow::TextureHasMipmaps0x0002テクスチャにはミップマップがあり、ミップマッピングを有効にして描画できます。
QQuickWindow::TextureOwnsGLTexture0x0004Qt 6.0 以降、このフラグは実際には使用されておらず、無視されます。ネイティブグラフィックリソースの所有権は、ラップする `QSGTexture` には譲渡できません。これは、`Qt Quick ` が、そのようなオブジェクトおよび関連するメモリをどのように解放すべきかについて、必要な詳細情報を持ち合わせていない可能性があるためです。
QQuickWindow::TextureCanUseAtlas0x0008画像はテクスチャアトラスにアップロードできます。
QQuickWindow::TextureIsOpaque0x0010このテクスチャは、QSGTexture::hasAlphaChannel() に対して false を返し、ブレンドは行われません。このフラグは Qt 5.6 で追加されました。

CreateTextureOptions 型は、QFlags<CreateTextureOption> の typedef です。これは、CreateTextureOption 値の論理和(OR)の組み合わせを格納します。

enum QQuickWindow::RenderStage

定数値説明
QQuickWindow::BeforeSynchronizingStage0同期前。
QQuickWindow::AfterSynchronizingStage1同期後。
QQuickWindow::BeforeRenderingStage2レンダリング前。
QQuickWindow::AfterRenderingStage3レンダリング後。
QQuickWindow::AfterSwapStage4フレームがスワップされた後。
QQuickWindow::NoStage5できるだけ早く。この値は Qt 5.6 で追加されました。

「シーングラフ」および「レンダリング」も参照してください 。

enum QQuickWindow::SceneGraphError

この列挙型は、sceneGraphError() シグナルにおけるエラーを表します。

定数値説明
QQuickWindow::ContextNotAvailable1グラフィックスコンテキストの作成に失敗しました。これは通常、適切な OpenGL 実装が見つからなかったことを意味します。例えば、グラフィックスドライバがインストールされておらず、OpenGL 2 がサポートされていない場合などが挙げられます。OpenGL ES を使用するモバイルおよび組み込みボードでは、このようなエラーはウィンドウシステムの統合に関する問題、あるいは Qt の設定が正しくないことを示している可能性があります。

enum QQuickWindow::TextRenderType

この列挙型は、Qt Quick (Text 、TextInput など)におけるテキストのような要素のデフォルトのレンダリングタイプを定義します。

ターゲットプラットフォーム上でテキストをネイティブに近い外観で表示したい場合、かつテキストの変形などの高度な機能を必要としない場合は、NativeTextRendering を選択してください。NativeTextRendering レンダリングタイプとこれらの機能を併用すると、画質が低下したり、場合によってはピクセル化されたりすることがあります。

QtTextRendering とCurveTextRendering は、いずれもハードウェアアクセラレーションによる手法です。QtTextRendering の方が高速ですが、より多くのメモリを使用し、大きなサイズではレンダリングアーティファクトが発生します。QtTextRendering で良好な視覚的結果が得られない場合や、グラフィックスメモリの消費を抑えることが優先される場合は、CurveTextRendering を代替手段として検討すべきです。

定数値説明
QQuickWindow::QtTextRendering0Qt 独自のラスタライズアルゴリズムを使用します。
QQuickWindow::NativeTextRendering1テキストには、オペレーティングシステムのネイティブラスタライザを使用します。
QQuickWindow::CurveTextRendering2テキストは、グラフィックスハードウェア上で直接動作するカーブラスタライザを使用してレンダリングされます。(Qt 6.7.0 で導入されました。)

プロパティのドキュメント

[read-only] activeFocusItem : QQuickItem*

このプロパティは、現在アクティブなフォーカスを持っている項目を保持します。アクティブなフォーカスを持っている項目がない場合は、null を返します。

アクセス関数:

QQuickItem *activeFocusItem() const

通知シグナル:

void activeFocusItemChanged()

『Qt Quick 』の` QQuickItem::forceActiveFocus()` および「キーボードフォーカス」も参照してください 。

color : QColor

このプロパティには、各フレームの開始時にカラーバッファをクリアするために使用される色が格納されます。

デフォルトでは、クリアカラーは白です。

アクセス関数:

QColor color() const
void setColor(const QColor &color)

通知シグナル:

void colorChanged(const QColor &)

関連項目: ` setDefaultAlphaBuffer()`。

[read-only] contentItem : QQuickItem* const

このプロパティには、シーンの非表示のルートアイテムが格納されます。

QQuickWindow には、そのコンテンツ全体を含む、1つの非表示のルートアイテムが常に存在します。このウィンドウにアイテムを追加するには、そのアイテムの親をcontentItemまたはシーン内の既存のアイテムに変更してください。

アクセス関数:

QQuickItem *contentItem() const

[read-only, since 6.11] devicePixelRatio : qreal

ウィンドウの物理ピクセルとデバイス非依存ピクセルの比率を返します。この値は、ウィンドウが表示されている画面によって異なり、ウィンドウを移動すると変化する場合があります。

この列挙型は Qt 6.11 で導入されました。

アクセス関数:

Notifier シグナル:

transientParent : QWindow*

このプロパティは、このウィンドウが一時的なポップアップとして表示される親ウィンドウを保持します。

これは、このウィンドウが、一時的な親ウィンドウに代わって表示されるダイアログまたはポップアップであることをウィンドウマネージャに示すヒントであり、その親ウィンドウは任意の種類のQWindow であってもかまいません。

ウィンドウをデフォルトで一過性の親ウィンドウの上に中央揃えにするには、ウィンドウマネージャによっては、flags プロパティに適切なQt::WindowType (Qt::Dialog など)を設定する必要がある場合もあります。

parent()も参照してください 。

メンバ関数のドキュメント

[explicit] QQuickWindow::QQuickWindow(QQuickRenderControl *control)

QMLシーンを表示するためのウィンドウを構築します。このウィンドウのレンダリングは、control オブジェクトによって制御されます。詳細については、QQuickRenderControl のドキュメントを参照してください。

[explicit] QQuickWindow::QQuickWindow(QWindow *parent = nullptr)

親ウィンドウparent を持つQMLシーンを表示するためのウィンドウを作成します。

[override virtual noexcept] QQuickWindow::~QQuickWindow()

ウィンドウを閉じます。

[override virtual] QAccessibleInterface *QQuickWindow::accessibleRoot() const

このウィンドウのアクセシビリティインターフェースを返します。そのようなインターフェースを作成できない場合は、0を返します。

[signal] void QQuickWindow::afterAnimating()

このシグナルは、レンダリングスレッドに対してシーングラフの同期処理を実行するよう要求する前に、GUIスレッド上で発火されます。

他の類似のシグナルとは異なり、このシグナルはレンダリングスレッドではなくGUIスレッド上で発火します。これは、外部のアニメーションシステムとQMLコンテンツを同期させるために使用できます。同時に、このシグナルはグラフィックス操作をトリガーするには適していないことを意味します。

[signal, since 6.0] void QQuickWindow::afterFrameEnd()

このシグナルは、シーングラフがフレームを送信したときに発火します。これは、afterRendering() など、他の関連するすべてのシグナルが発火した後に発火します。これは、フレームのレンダリング時にシーングラフのレンダリングスレッドによって発火される最後のシグナルです。

注: frameSwapped() とは異なり 、このシグナルは、Qt Quick の出力がQQuickRenderControl を介してリダイレクトされている場合でも、確実に発火します。

警告:このシグナルは シーングラフのレンダリングスレッドから発せられます。スロット関数が実行の継続前に完了する必要がある場合は、接続が直接接続であることを確認する必要があります(Qt::ConnectionType を参照)。

この関数は Qt 6.0 で導入されました。

beforeFrameBegin() およびrendererInterface()も参照してください 。

[signal] void QQuickWindow::afterRenderPassRecording()

このシグナルは、シーングラフがメインのレンダリングパスに関するコマンドを記録した後、そのパスがコマンドバッファ上でまだ確定していない段階で発せられます。

このシグナルは、afterRendering() よりも前に発行され、フレームだけでなく、シーングラフのメインレンダリングパスの記録もまだアクティブであることを保証します。これにより、別のレンダリングパスを完全に生成することなく(通常、これによりアタッチされた画像がクリアされてしまいます)、コマンドを挿入することが可能になります。ネイティブグラフィックスオブジェクトは、QSGRendererInterface を通じて照会できます。

注:リソースの 更新(アップロード、コピー)は、通常、レンダリングパス内からはキューに入れることができません。したがって、より複雑なユーザーレンダリングを行う場合は、beforeRendering() とこのシグナルの両方に接続する必要があります。

警告:このシグナルは シーングラフのレンダリングスレッドから発火されます。実行を続行する前にスロット関数を完了させる必要がある場合は、接続が直接的であることを確認する必要があります(Qt::ConnectionType を参照)。

rendererInterface() およびQML の「シーングラフ - RHI」も参照してください 。

[signal] void QQuickWindow::afterRendering()

このシグナルは、シーングラフがそのコマンドをコマンドバッファに追加した後、そのコマンドがまだグラフィックスキューに送信されていない時点で発せられます。 必要に応じて、このシグナルに接続されたスロット関数では、QSGRendererInterface を通じて、コマンドバッファなどのネイティブリソースを事前に照会できます。ただし、この時点ですでにレンダリングパス(または複数のパス)が記録済みであり、シーングラフのパス内にコマンドを追加することはできない点に注意してください。 その場合は、代わりに `afterRenderPassRecording()` を使用してください。したがって、Qt 5 とは異なり、Qt 6 ではこのシグナルの用途は限られています。むしろ、カスタムレンダリングのアンダーレイやオーバーレイを実現するには、通常、`beforeRendering()` と `beforeRenderPassRecording()`、あるいは `beforeRendering()` と `afterRenderPassRecording()` の組み合わせが使用されます。

警告: このシグナルは シーングラフのレンダリングスレッドから発せられます。スロット関数が実行を継続する前に完了する必要がある場合は、接続がダイレクトであることを確認する必要があります(Qt::ConnectionType を参照)。

注: OpenGLを使用する場合 、OpenGL 3.x または 4.x 固有の状態を設定し、接続されたスロットから戻る際にそれらを有効のままにしたり、デフォルト値以外の値に設定したままにしたりすると、シーングラフのレンダリングに干渉する可能性があることに注意してください。シーングラフによるレンダリングに使用されるQOpenGLContext は、シグナルが発信された時点でバインドされます。

関連項目: rendererInterface()、QML におけるシーングラフ - RHI、QML におけるシーングラフ - OpenGL、QML におけるシーングラフ - Metal、QML におけるシーングラフ - Vulkan、およびQML におけるシーングラフ - Direct3D 11。

[signal] void QQuickWindow::afterSynchronizing()

このシグナルは、シーングラフが QML 状態と同期された後に発火します。

このシグナルを使用すると、GUIスレッドがまだロックされている間に、QQuickItem::updatePaintNode() の呼び出し後に必要な準備を行うことができます。

OpenGL を使用する場合、この時点で、シーングラフによるレンダリングに使用される `QOpenGLContext ` がバインドされます。

警告: この シグナルは 、シーングラフのレンダリングスレッドから発せられます。実行を続行する前にスロット関数を終了させる必要がある場合は、接続が直接接続であることを確認する必要があります (Qt::ConnectionType を参照)。

警告: OpenGLを使用する場合 、OpenGL 3.x または 4.x 固有の状態を設定し、接続されたスロットから戻る際にそれらを有効のままにしたり、デフォルト値以外の値に設定したままにしたりすると、シーングラフのレンダリングに支障をきたす可能性があることに注意してください。

[signal, since 6.0] void QQuickWindow::beforeFrameBegin()

このシグナルは、シーングラフがフレームの準備を開始する前に発火します。これは、beforeSynchronizing() やbeforeRendering() といったシグナルよりも先に発火します。これは、シーングラフのレンダリングスレッドが新しいフレームの準備を開始する際に発火する、最も早いシグナルです。

このシグナルは、Qt Quick が基盤となるレンダリングハードウェアインターフェース API を通じて新しいフレームの記録を開始していない段階で、リソースのクリーンアップなどの特定の操作を実行する必要がある、低レベルのグラフィックスフレームワークに関連しています。

警告: このシグナルは シーングラフのレンダリングスレッドから発せられます。スロット関数が実行の継続前に完了する必要がある場合は、接続が直接接続であることを確認する必要があります(Qt::ConnectionType を参照)。

この関数は Qt 6.0 で導入されました。

afterFrameEnd() およびrendererInterface()も参照してください 。

[signal] void QQuickWindow::beforeRenderPassRecording()

このシグナルは、シーングラフがメインのレンダリングパスのコマンドの記録を開始する前に発せられます(レイヤーにはそれぞれ独自のパスがあり、このシグナルが発せられる時点ですでに完全に記録されています)。シグナルが発せられた時点で、コマンドバッファ上ではすでにレンダリングパスがアクティブになっています。

このシグナルは `beforeRendering()` よりも後に発火し、フレームだけでなく、シーングラフのメインレンダリングパスの記録もアクティブであることを保証します。これにより、別途のレンダリングパス全体を生成することなく(通常、これを行うとアタッチされた画像がクリアされてしまいます)、コマンドを挿入することが可能になります。ネイティブグラフィックスオブジェクトは `QSGRendererInterface` を通じて照会できます。

注:リソースの 更新(アップロード、コピー)は、通常、レンダリングパス内からはキューに入れることができません。したがって、より複雑なユーザーレンダリングを行う場合は、beforeRendering() とこのシグナルの両方に接続する必要があります。

警告:このシグナルは シーングラフのレンダリングスレッドから発せられます。実行を続行する前にスロット関数を完了させる必要がある場合は、接続が直接的であることを確認する必要があります(Qt::ConnectionType を参照)。

rendererInterface() および「QML のシーングラフ - RHI」も参照してください 。

[signal] void QQuickWindow::beforeRendering()

この信号は、フレームの準備が完了した後に発信されます。つまり、該当する場合、コマンドバッファが記録モードになっていることを意味します。 必要に応じて、この信号に接続されたスロット関数は、QSGRendererInterface を通じて、前述のコマンドのようなネイティブリソースを照会できます。ただし、この時点ではメインのレンダリングパスの記録はまだ開始されておらず、そのパス内にコマンドを追加することはできない点に注意してください。 パスの開始とは、カラーバッファ、深度バッファ、ステンシルバッファをクリアすることを意味するため、このシグナルに接続するだけではアンダーレイ型のレンダリングを実現することはできません。その場合は、beforeRenderPassRecording() に接続してください。ただし、コピー型のコマンドの記録を希望する場合は、このシグナルへの接続が依然として重要です。なぜなら、それらのコマンドはレンダリングパス内でキューに追加できないからです。

警告:このシグナルは シーングラフのレンダリングスレッドから発せられます。スロット関数が実行を継続する前に完了する必要がある場合は、接続がダイレクト接続であることを確認する必要があります(Qt::ConnectionType を参照)。

注: OpenGLを使用する場合 、OpenGL 3.x または 4.x に固有の状態を設定し、接続されたスロットから戻る際にそれらを有効のままにしたり、デフォルト値以外の値に設定したままにしたりすると、シーングラフのレンダリングに干渉する可能性があることに注意してください。シーングラフによるレンダリングに使用されるQOpenGLContext は、シグナルが発行された時点でバインドされます。

関連項目: rendererInterface()、QML におけるシーングラフ - RHI、QML におけるシーングラフ - OpenGL、QML におけるシーングラフ - Metal、QML におけるシーングラフ - Vulkan、およびQML におけるシーングラフ - Direct3D 11。

[signal] void QQuickWindow::beforeSynchronizing()

このシグナルは、シーングラフがQMLの状態と同期される前に発火します。

このシグナルはシーングラフのレンダリングスレッドから発火されますが、QQuickItem::updatePaintNode() の場合と同様に、GUI スレッドがブロックされることが保証されています。したがって、Qt::DirectConnection に接続されたスロットやラムダ内で、GUI スレッドのデータにアクセスしても安全です。

このシグナルを使用することで、QQuickItem::updatePaintNode() を呼び出す前に必要な準備を行うことができます。

OpenGL を使用する場合、この時点でシーングラフによるレンダリングに使用される `QOpenGLContext ` がバインドされます。

警告:このシ グナルは 、シーングラフのレンダリングスレッドから発信されます。実行を続行する前にスロット関数を終了させる必要がある場合は、接続が直接接続であることを確認する必要があります(Qt::ConnectionType を参照)。

警告: OpenGLを使用する場合 、OpenGL 3.x または 4.x 固有の状態を設定し、接続されたスロットから戻る際にそれらを有効のままにしたり、デフォルト値以外の値に設定したままにしたりすると、シーングラフのレンダリングに支障をきたす可能性があることに注意してください。

void QQuickWindow::beginExternalCommands()

生のグラフィックス(OpenGL、Vulkan、Metal など)コマンドをシーングラフによるレンダリングと組み合わせる場合、シーングラフがメインのレンダリングパスをレンダリングするために使用するコマンドバッファにコマンドを書き込む前に、この関数を呼び出す必要があります。これは、状態が上書きされるのを防ぐためです。

実際には、この関数はbeforeRenderPassRecording()やafterRenderPassRecording()シグナルに接続されたスロットから呼び出されることがよくあります。

アプリケーション独自のコマンドバッファ(シーングラフから取得したものではなく、アプリケーションによって作成・管理される VkCommandBuffer や MTLCommandBuffer + MTLRenderCommandEncoder など)にコマンドを書き込む場合は、この関数を呼び出す必要はありません。 ネイティブなコマンドバッファの概念が公開されていないグラフィックス API(OpenGL、Direct 3D 11)では、beginExternalCommands() とendExternalCommands() を組み合わせることで、Qt 5 の resetOpenGLState() 関数の代わりとなります。

QSGRenderNode のrender() 実装内では、この関数およびendExternalCommands() を呼び出す必要はありません。これは、シーングラフがレンダリングノードに対して必要な手順を暗黙的に実行するためです。

ネイティブのグラフィックスオブジェクト(グラフィックスデバイス、コマンドバッファ、エンコーダなど)には、QSGRendererInterface::getResource() を通じてアクセスできます。

警告: `QSGRendererInterface::CommandListResource ` は、`beginExternalCommands()` と `endExternalCommands()` の間で異なるオブジェクトを返す場合があることに注意してください 。これは、基盤となる実装が、レンダリングパス内で外部グラフィックスコマンドを記録するために専用のセカンダリコマンドバッファを提供している場合に発生する可能性があります。したがって、この関数を呼び出した後は、必ず `CommandListResource` を照会してください。以前の照会で取得したオブジェクトを再利用しようとしないでください。

注: シーングラフが OpenGL を使用している場合 、コンテキスト内の OpenGL 状態は任意の設定になっている可能性があり、この関数は状態をデフォルト値にリセットしないことに注意してください。

関連項目: endExternalCommands() およびQQuickOpenGLUtils::resetOpenGLState()。

[override virtual protected] void QQuickWindow::closeEvent(QCloseEvent *e)

QWindow::closeEvent (QCloseEvent *ev)を再実装します。

QSGImageNode *QQuickWindow::createImageNode() const

単純な画像ノードを作成します。シーングラフが初期化されていない場合、戻り値は null になります。

これは、QSGSimpleTextureNode を直接生成する代わりに使用できる、バックエンドを問わない代替手段です。

QSGImageNodeも参照してください 。

QSGNinePatchNode *QQuickWindow::createNinePatchNode() const

9パッチノードを作成します。シーングラフが初期化されていない場合、戻り値はnullになります。

QSGRectangleNode *QQuickWindow::createRectangleNode() const

単純な矩形ノードを作成します。シーングラフが初期化されていない場合、戻り値はnullとなります。

これは、QSGSimpleRectNode を直接生成する代わりに、バックエンドを問わず利用できる代替手段です。

QSGRectangleNodeも参照してください 。

[since 6.7] QSGTextNode *QQuickWindow::createTextNode() const

テキストノードを作成します。シーングラフが初期化されていない場合、戻り値は null になります。

この関数は Qt 6.7 で導入されました。

QSGTextNodeも参照してください 。

QSGTexture *QQuickWindow::createTextureFromImage(const QImage &image, QQuickWindow::CreateTextureOptions options) const

指定されたimage から新しいQSGTexture を作成します。画像にアルファチャンネルがある場合、対応するテクスチャにもアルファチャンネルが含まれます。

返されたテクスチャの削除は、この関数を呼び出した側が責任を持って行う必要があります。その後、基になるネイティブテクスチャオブジェクトは、QSGTexture とともに破棄されます。

options にTextureCanUseAtlas が含まれている場合、エンジンはその画像をテクスチャアトラスに配置することがあります。アトラス内のテクスチャは、ジオメトリの取得にQSGTexture::normalizedTextureSubRect()に依存する必要があり、QSGTexture::Repeat はサポートされません。CreateTextureOption のその他の値は無視されます。

options にTextureIsOpaque が指定されている場合、エンジンはQSGTexture::hasAlphaChannel()に対してfalseを返すRGBテクスチャを作成します。不透明なテクスチャは、ほとんどの場合、レンダリングが高速になります。このフラグが設定されていない場合、テクスチャは画像のフォーマットに基づいたアルファチャンネルを持ちます。

options にTextureHasMipmaps が指定されている場合、エンジンはミップマップフィルタリングを使用できるテクスチャを作成します。ミップマップ化されたテクスチャはアトラスに含めることはできません。

この関数では、アルファチャンネルとブレンディングがデフォルトで想定されているため、`TextureHasAlphaChannel `を`options `に設定しても意味がありません。これを無効にするには、`TextureIsOpaque`を設定してください。

シーングラフが OpenGL を使用する場合、返されるテクスチャは、テクスチャターゲットとして `GL_TEXTURE_2D `、内部フォーマットとして `GL_RGBA ` を使用します。他のグラフィックス API では、テクスチャフォーマットは通常 `RGBA8` になります。異なるパラメータでテクスチャを作成するには、QSGTexture を再実装してください。

警告: シーングラフがまだ初期化されていない場合、この関数は 0 を返します。

警告: 返されるテクスチャは シーングラフによってメモリ管理されないため、呼び出し元がレンダリングスレッド上で明示的に削除する必要があります。これは、QSGNode のデストラクタ内でテクスチャを削除するか、テクスチャがすでにレンダリングスレッドにアフィニティを持っている場合にはdeleteLater() を使用することで実現されます。

この関数は、メインスレッドとレンダリングスレッドの両方から呼び出すことができます。

sceneGraphInitialized() およびQSGTextureも参照してください 。

QSGTexture *QQuickWindow::createTextureFromImage(const QImage &image) const

これはオーバーロードされた関数です。

[since 6.6] QSGTexture *QQuickWindow::createTextureFromRhiTexture(QRhiTexture *texture, QQuickWindow::CreateTextureOptions options = {}) const

指定されたtexture から、新しいQSGTexture を作成します。

options を使用して、テクスチャ属性をカスタマイズします。この関数では、TextureHasAlphaChannel フラグのみが考慮されます。このフラグが設定されている場合、生成されたQSGTexture は、シーングラフレンダラーによって常にブレンディングが必要なものと扱われます。完全に不透明なテクスチャの場合、このフラグを設定しないことで、レンダリング時のアルファブレンディング処理にかかるコストを節約できます。 このフラグは、QRhiTexture のformat とは直接対応していません。つまり、一般的に使用されるQRhiTexture::RGBA8 などのテクスチャ形式を使用している場合でも、このフラグを設定しないことはまったく問題ありません。

ミップマッピングは、options によって制御されません。これは、texture がすでに作成されており、ミップマップの有無がそこに焼き込まれているためです。

返されるQSGTexture はQRhiTexture を所有しているため、texture は返されたQSGTexture とともに破棄されます。

texture が基になるネイティブグラフィックスリソース(OpenGLテクスチャオブジェクト、Vulkanイメージなど)を所有しているかどうかは、QRhiTexture の作成方法(QRhiTexture::create() またはQRhiTexture::createFrom())に依存し、この関数によって制御または変更されるものではありません。

注:これは 、シーングラフがすでに初期化されており、デフォルトのQRhi ベースのアダプテーションを使用している場合にのみ機能します。それ以外の場合は、戻り値はnullptr となります。

注:この関数は 、シーングラフのレンダリングスレッド上でのみ呼び出すことができます。

この関数は Qt 6.6 で導入されました。

関連項目: createTextureFromImage()、sceneGraphInitialized()、およびQSGTexture 。

[signal, since 6.11] void QQuickWindow::devicePixelRatioChanged()

このシグナルは、実効デバイス画素比が変更されたときに発信されます。

注: プロパティ `devicePixelRatio`の通知 シグナルです。

この関数は Qt 6.11 で導入されました。

effectiveDevicePixelRatio()も参照してください 。

qreal QQuickWindow::effectiveDevicePixelRatio() const

このウィンドウのデバイスピクセル比を返します。

これは、QWindow::devicePixelRatio() とは異なり、QQuickRenderControl およびQQuickRenderTarget によるリダイレクトされたレンダリングをサポートしている点が異なります。QQuickRenderControl を使用する場合、QQuickWindow は多くの場合完全に作成されないため、表示されることはなく、ウィンドウシステム内に基礎となるネイティブウィンドウも作成されません。 その結果、デバイスピクセル比などのプロパティを照会しても、正しい結果が得られません。この関数は、QQuickRenderControl::renderWindowFor() とQQuickRenderTarget::devicePixelRatio() の両方を考慮に入れています。リダイレクトが有効でない場合、結果はQWindow::devicePixelRatio() と同じになります。

注: プロパティdevicePixelRatioのゲッター 関数。

関連項目: QQuickRenderControl 、QQuickRenderTarget 、setRenderTarget()、およびQWindow::devicePixelRatio()。

void QQuickWindow::endExternalCommands()

生のグラフィックス(OpenGL、Vulkan、Metalなど)のコマンドとシーングラフによるレンダリングを組み合わせる場合、シーングラフがメインのレンダリングパスをレンダリングするために使用するコマンドバッファにコマンドを書き込んだ後、この関数を呼び出す必要があります。これは、状態が上書きされるのを防ぐためです。

実際には、この関数はbeforeRenderPassRecording()やafterRenderPassRecording()シグナルに接続されたスロットから呼び出されることがよくあります。

アプリケーション独自のコマンドバッファ(シーングラフから取得したものではなく、アプリケーションによって作成・管理される VkCommandBuffer や MTLCommandBuffer + MTLRenderCommandEncoder など)にコマンドを書き込む場合は、この関数を呼び出す必要はありません。 ネイティブなコマンドバッファの概念が公開されていないグラフィックスAPI(OpenGL、Direct 3D 11)では、beginExternalCommands() と endExternalCommands() を組み合わせることで、Qt 5 の resetOpenGLState() 関数の代替機能を提供します。

QSGRenderNode のrender() 実装内では、この関数とbeginExternalCommands() を呼び出す必要はありません。これは、シーングラフがレンダリングノードに対して必要な手順を暗黙的に実行するためです。

beginExternalCommands() およびQQuickOpenGLUtils::resetOpenGLState()も参照してください 。

[override virtual protected] bool QQuickWindow::event(QEvent *event)

QWindow::event(QEvent *ev) を再実装しています。

[override virtual protected] void QQuickWindow::exposeEvent(QExposeEvent *)

QWindow::exposeEvent (QExposeEvent *ev)を再実装しています。

[override virtual protected] void QQuickWindow::focusInEvent(QFocusEvent *ev)

QWindow::focusInEvent(QFocusEvent *ev) を再実装します。

[override virtual protected] void QQuickWindow::focusOutEvent(QFocusEvent *ev)

QWindow::focusOutEvent(QFocusEvent *ev) を再実装します。

[signal] void QQuickWindow::frameSwapped()

このシグナルは、フレームがレンダリングのためにキューに入れられたときに発せられます。垂直同期が有効になっている場合、連続してアニメーションが再生されているシーンでは、このシグナルはvsyncインターバルごとに最大1回発せられます。

このシグナルは、シーングラフのレンダリングスレッドから発火されます。

QImage QQuickWindow::grabWindow()

ウィンドウの内容を取得し、画像として返します。

ウィンドウが表示されていない状態でも、grabWindow() 関数を呼び出すことは可能です。ただし、その場合は、ウィンドウが `created ` であり、有効なサイズを持ち、かつ同じプロセス内で他の `QQuickWindow ` インスタンスがレンダリングされていないことが条件となります。

注: このウィンドウをQQuickRenderControl と組み合わせて使用する場合 、software バックエンドが使用されていない限り、この関数の結果は空の画像になります。 これは、QQuickRenderControl およびsetRenderTarget() を使用して出力をアプリケーションが管理するグラフィックリソース(テクスチャなど)にリダイレクトする場合、アプリケーションは最初からリソースを完全に制御しているため、最終的な読み込み操作の管理と実行に最適であるためです。

警告:この関数を呼び出すと 、パフォーマンスの問題が発生します。

警告: この関数は 、GUI スレッドからのみ呼び出すことができます。

[static, since 6.0] QSGRendererInterface::GraphicsApi QQuickWindow::graphicsApi()

この時点でシーングラフが初期化された場合に使用されるグラフィックスAPIを返します。

シーングラフが使用するAPIを照会する標準的な方法は、シーングラフの初期化が完了した後(例えば、sceneGraphInitialized()シグナルが発信されたとき、またはその直後など)にQSGRendererInterface::graphicsApi()を使用することです。その場合、そのグラフィックスAPIを使用してすべてが正しく初期化されたことが確認できるため、真の結果が得られます。

しかし、これは必ずしも便利とは限りません。アプリケーションが外部フレームワークを設定する必要がある場合や、シーングラフに組み込まれたAPI選択ロジックに依存する形でsetGraphicsDevice()を使用する必要がある場合、QQuickWindow が可視化されるか、QQuickRenderControl::initialize()が呼び出されるまで、そのような操作を先送りすることが常に可能とは限りません。

そのため、setGraphicsApi() の対となるものとして、この静的関数が提供されています。これはいつでも呼び出すことができ、その結果は、呼び出しの時点でシーングラフが初期化されていた場合にシーングラフが選択するであろう API を反映しています。

注:この静的関数は 、メイン(GUI)スレッドでのみ呼び出すことを意図しています。レンダリング時に API を照会するには、そのオブジェクトがレンダリングスレッド上に存在するため、QSGRendererInterface を使用してください。

注:この関数は 、シーングラフのバックエンドを考慮しません。

この関数は Qt 6.0 で導入されました。

setGraphicsApi()も参照してください 。

[since 6.0] QQuickGraphicsConfiguration QQuickWindow::graphicsConfiguration() const

setGraphicsConfiguration() に渡された `QQuickGraphicsConfiguration ` を返します。それ以外の場合は、デフォルト構築されたオブジェクトを返します。

この関数は Qt 6.0 で導入されました。

setGraphicsConfiguration()も参照してください 。

[since 6.0] QQuickGraphicsDevice QQuickWindow::graphicsDevice() const

setGraphicsDevice() に渡された `QQuickGraphicsDevice ` を返します。それ以外の場合は、デフォルト生成されたものを返します

この関数は Qt 6.0 で導入されました。

setGraphicsDevice()も参照してください 。

const QQuickWindow::GraphicsStateInfo &QQuickWindow::graphicsStateInfo()

RHIの内部状態の一部、特にバックエンド(VulkanやMetalの統合など)のダブルバッファリングまたはトリプルバッファリングの状態を表すGraphicsStateInfo 構造体への参照を返します。 これは、基盤となるグラフィックスAPIがVulkanまたはMetalであり、外部のレンダリングコードが、パイプラインのストール(停止)を回避するために、ユニフォームバッファなど、頻繁に変化するリソースに対して独自のダブルバッファリングまたはトリプルバッファリングを実行したい場合に適用されます。

[static] bool QQuickWindow::hasDefaultAlphaBuffer()

新しく作成されるウィンドウでアルファ透過を使用するかどうかを返します。

setDefaultAlphaBuffer()も参照してください 。

[override virtual protected] void QQuickWindow::hideEvent(QHideEvent *)

QWindow::hideEvent(QHideEvent *ev) を再実装します。

QQmlIncubationController *QQuickWindow::incubationController() const

このウィンドウのフレーム間でインキュベーションをスプライスするインキュベーションコントローラを返します。QQuickView では、このコントローラが自動的にインストールされますが、そうでない場合は、QQmlEngine::setIncubationController() を使用して手動でインストールする必要があります。

このコントローラーはウィンドウが所有しており、ウィンドウが削除されると破棄されます。

bool QQuickWindow::isPersistentGraphics() const

QQuickWindow の存続期間中に、必須のグラフィックリソースを解放できるかどうかを返します。

注:これは ヒントであり、必ずしも考慮されるとは限りません。

関連項目 :setPersistentGraphics()

bool QQuickWindow::isPersistentSceneGraph() const

このQQuickWindow の存続期間中に、シーングラフのノードおよびリソースを解放できるかどうかを返します。

注:これは ヒントです。これがいつ、どのように行われるかは実装に依存します。

bool QQuickWindow::isSceneGraphInitialized() const

シーングラフが初期化されている場合は true を返し、そうでない場合は false を返します。

[override virtual protected] void QQuickWindow::keyPressEvent(QKeyEvent *e)

QWindow::keyPressEvent (QKeyEvent *ev)を再実装します。

[override virtual protected] void QQuickWindow::keyReleaseEvent(QKeyEvent *e)

QWindow::keyReleaseEvent(QKeyEvent *ev) を再実装します。

[override virtual protected] void QQuickWindow::mouseDoubleClickEvent(QMouseEvent *event)

QWindow::mouseDoubleClickEvent(QMouseEvent *ev) を再実装します。

[override virtual protected] void QQuickWindow::mouseMoveEvent(QMouseEvent *event)

QWindow::mouseMoveEvent(QMouseEvent *ev) を再実装します。

[override virtual protected] void QQuickWindow::mousePressEvent(QMouseEvent *event)

QWindow::mousePressEvent(QMouseEvent *ev) を再実装します。

[override virtual protected] void QQuickWindow::mouseReleaseEvent(QMouseEvent *event)

QWindow::mouseReleaseEvent(QMouseEvent *ev) を再実装します。

[slot] void QQuickWindow::releaseResources()

この関数は、QMLシーンが現在保持している不要なリソースを解放しようとします。

この関数を呼び出すと、シーングラフに対して、グラフィックスパイプラインオブジェクト、シェーダープログラム、画像データなどのキャッシュされたグラフィックスリソースを解放するよう要求します。

さらに、使用中のレンダリングループによっては、この関数の呼び出しにより、シーングラフおよびウィンドウに関連するすべてのレンダリングリソースが解放される場合もあります。その場合は、sceneGraphInvalidated() シグナルが発行され、ユーザーは自身のグラフィックリソースをクリーンアップすることができます。 アプリケーション側でクリーンアップ処理を行うことが不可能な場合、setPersistentGraphics() およびsetPersistentSceneGraph() 関数を使用してこれを防ぐことができますが、その場合はメモリ使用量が増えるという代償が伴います。

注: グラフィックスパイプラインやシェーダープログラムなどのキャッシュされたグラフィックスリソースの解放は 、永続性ヒントに依存しません。これらのリソースの解放は、永続的なグラフィックスおよびシーングラフのヒントの値にかかわらず行われます。

注:この関数は 、QQuickItem::releaseResources() 仮想関数とは関係ありません。

関連項目: sceneGraphInvalidated()、setPersistentGraphics()、およびsetPersistentSceneGraph()。

[since 6.0] QQuickRenderTarget QQuickWindow::renderTarget() const

setRenderTarget() に渡されたQQuickRenderTarget を返します。それ以外の場合は、デフォルト構築された を返します

この関数は Qt 6.0 で導入されました。

setRenderTarget()も参照してください 。

QSGRendererInterface *QQuickWindow::rendererInterface() const

現在のレンダラーインターフェースを返します。この値は常に有効であり、nullになることはありません。

注:この関数は 、QQuickWindow の構築後であればいつでも呼び出すことができます。isSceneGraphInitialized()がまだfalseである間でも呼び出すことができます。ただし、一部のレンダラーインターフェース関数、特にQSGRendererInterface::getResource()は、シーングラフが起動して実行されている状態になるまで機能しません。一方、QSGRendererInterface::graphicsApi()やQSGRendererInterface::shaderType()のようなバックエンドクエリは、常に機能します。

注: 返されるポインタの所有権は Qt にあります。返されるインスタンスは、使用されているシーングラフバックエンドに応じて、異なるQQuickWindow インスタンス間で共有される場合とされない場合があります。したがって、アプリケーションでは、すでに取得済みのポインタを再利用するのではなく、各QQuickWindow に対してインターフェースオブジェクトを個別に取得する必要があります。

「 QSGRenderNode 」および「QSGRendererInterface 」も参照してください 。

[override virtual protected] void QQuickWindow::resizeEvent(QResizeEvent *ev)

QWindow::resizeEvent(QResizeEvent *ev) を再実装します。

[since 6.6] QRhi *QQuickWindow::rhi() const

このウィンドウがレンダリングに使用するQRhi オブジェクトを返します。

この関数は、ウィンドウがQt 3D APIおよびシェーディング言語の抽象化機能を使用している場合にのみ利用可能です。つまり、software アダプテーションを使用している場合は、結果は常にnullとなります。

結果は、レンダリングが初期化された場合にのみ有効であり、これはsceneGraphInitialized()シグナルの発火によって示されます。その時点以前は、戻り値はnullになります。通常の画面上のQQuickWindow では、シーングラフの初期化は通常、ネイティブウィンドウが最初に公開(表示)されたときに行われます。QQuickRenderControl を使用する場合、初期化はinitialize()を明示的に呼び出すことで行われます。

実際には、この関数はQSGRendererInterface を介してQRhi を照会するための近道となっています。

この関数は Qt 6.6 で導入されました。

[signal] void QQuickWindow::sceneGraphAboutToStop()

このシグナルは、シーングラフがレンダリングを停止しようとしている際に、レンダリングスレッドで発火します。これは通常、ウィンドウが非表示になったことが原因で発生します。

アプリケーションはこのシグナルを利用してリソースを解放できますが、それらを迅速に再インスタンス化できるよう準備しておく必要があります。この時点では、シーングラフとグラフィックスコンテキストは解放されません。

警告:このシグナルは シーングラフのレンダリングスレッドから発せられます。スロット関数が実行の再開前に完了する必要がある場合は、接続が直接接続であることを確認する必要があります(Qt::ConnectionType を参照)。

警告: sceneGraphAboutToStop() のシグナルハンドラは、シグナルハンドラが呼び出された時点と同じ状態でグラフィックスコンテキストを残すよう、十分に注意してください 。そうしないと、シーンが正しくレンダリングされなくなる可能性があります。

sceneGraphInvalidated()も参照してください 。

[static] QString QQuickWindow::sceneGraphBackend()

指定されたQt Quick のシーングラフバックエンドを返します。

注: アプリケーション内で最初のQQuickWindow が構築されるまでは、この関数の戻り値は 、その後のsetSceneGraphBackend()への呼び出しによって古くなっている可能性があります。

注:この 値は 、QQuickWindow が構築された後に、環境変数QT_QUICK_BACKEND に指定されたリクエストのみを反映します。

setSceneGraphBackend()も参照してください 。

[signal] void QQuickWindow::sceneGraphError(QQuickWindow::SceneGraphError error, const QString &message)

このシグナルは、シーングラフの初期化中にerror が発生した際に発火します。

グラフィックコンテキストの作成失敗などのエラーを独自の方法で処理したい場合は、アプリケーションはこのシグナルに接続する必要があります。このシグナルにスロットが接続されていない場合、動作は異なります。Quickはmessage を出力するか、メッセージボックスを表示して、アプリケーションを終了します。

このシグナルはGUIスレッドから発せられます。

[signal] void QQuickWindow::sceneGraphInitialized()

このシグナルは、シーングラフの初期化が完了したときに発火します。

このシグナルは、シーングラフのレンダリングスレッドから発せられます。

[signal] void QQuickWindow::sceneGraphInvalidated()

このシグナルは、シーングラフが無効化されたときに発信されます。

このシグナルは、使用されていたグラフィックス・レンダリング・コンテキストが無効化されたことを意味し、そのコンテキストに関連付けられていたすべてのユーザーリソースを解放する必要があります。

OpenGL を使用してレンダリングする場合、この関数が呼び出されると、このウィンドウのQOpenGLContext がバインドされます。唯一の例外は、EGL_CONTEXT_LOST などを通じて、Qt の制御外でネイティブ OpenGL が破棄された場合です。

このシグナルは、シーングラフのレンダリングスレッドから発せられます。

void QQuickWindow::scheduleRenderJob(QRunnable *job, QQuickWindow::RenderStage stage)

このウィンドウのレンダリングが指定されたstage に到達した際に、job を実行するようにスケジュールします。

これは、「ワンショット」タスクに対する `QQuickWindow ` の同等のシグナルに対する便宜的な機能です。

ウィンドウは `job ` の所有権を取得し、ジョブが完了したらそれを削除します。

job が実行される前にレンダリングが終了した場合、ジョブは実行された後、シーングラフのクリーンアップの一環として削除されます。ウィンドウが一度も表示されず、QQuickWindow が破棄される前にレンダリングが行われなかった場合、保留中のすべてのジョブは、run() メソッドが呼び出されることなく破棄されます。

レンダリングが別のスレッドで行われている場合、そのジョブはレンダリングスレッド上で実行されます。

stage がNoStage の場合、job は、レンダリングスレッドがフレームのレンダリングで忙しくない最初の機会に行われます。ジョブが投稿または処理される時点で、ウィンドウが公開されておらず、かつレンダリング可能でない場合、ジョブはrun()メソッドが実行されることなく削除されます。 スレッド化されていないレンダラーが使用されている場合、ジョブの run() メソッドは同期的実行されます。OpenGL を使用してレンダリングを行う場合、NoStage ジョブを含むすべてのジョブを実行する前に、OpenGL コンテキストがレンダラーのコンテキストに変更されます。

注:この関数はレンダリングを トリガーしません。NoStage 以外のステージをターゲットとするジョブは、他の場所でレンダリングがトリガーされるまで「実行待ち」の状態として保持されます。ジョブを早期に実行させるには、QQuickWindow::update()を呼び出してください。

関連項目: beforeRendering()、afterRendering()、beforeSynchronizing()、afterSynchronizing()、frameSwapped()、およびsceneGraphInvalidated()も参照してください 。

[static] void QQuickWindow::setDefaultAlphaBuffer(bool useAlpha)

useAlpha 新しく作成されるウィンドウでアルファ透過を使用するかどうかを指定します。

半透明のウィンドウを作成する予定のアプリケーションでは、最初のQQuickWindow を作成する前に、この値をtrueに設定する必要があります。デフォルト値はfalseです。

hasDefaultAlphaBuffer()も参照してください 。

[static, since 6.0] void QQuickWindow::setGraphicsApi(QSGRendererInterface::GraphicsApi api)

指定されたグラフィックスapi を要求します。

組み込みのデフォルトのグラフィックス適応が使用される場合、api は、シーングラフがレンダリングに使用するグラフィックス API(OpenGL、Vulkan、Metal、または Direct3D)を指定します。さらに、software バックエンドも組み込まれており、api をQSGRendererInterface::Software に設定することで要求できます。

特定のバックエンド(組み込みまたは動的に読み込まれるプラグインとしてインストールされたもの)を要求するためにのみ使用できるsetSceneGraphBackend() とは異なり、この関数はグラフィックス API というより高レベルの概念に基づいて動作します。この関数は、Qt Quick に同梱されているバックエンドを網羅しており、したがってQSGRendererInterface::GraphicsApi 列挙型に対応する値を持っています。

この関数がまったく呼び出されず、かつ同等の環境変数QSG_RHI_BACKEND も設定されていない場合、シーングラフはプラットフォームに基づいて使用するグラフィックスAPIを選択します。

この関数は、特定のAPIでのレンダリングにのみ対応しているアプリケーションにおいて重要になります。例えば、アプリケーションがネイティブなOpenGLやVulkanによるレンダリングを行う場合、Qt Quick もOpenGLまたはVulkanを使用してレンダリングされるようにする必要があります。このようなアプリケーションでは、main()関数の早い段階でこの関数を呼び出すことが期待されます。

注:この 関数の呼び出しは 、アプリケーション内で最初のQQuickWindow を構築する前に実行する必要があります。一度構築されると、グラフィックスAPIを変更することはできません。

注: QQuickRenderControl と組み合わせて使用する場合 、このルールは緩和されます。グラフィックスAPIの変更は可能ですが、既存のすべてのQQuickRenderControl およびQQuickWindow インスタンスが破棄された後に限られます。

シーングラフがレンダリングに使用しているグラフィックス API を確認するには、シーングラフの `has initialized` の後に `QSGRendererInterface::graphicsApi()` を呼び出します。これは通常、ウィンドウが最初に表示されたとき、または `QQuickRenderControl::initialize()` が呼び出されたときに発生します。

シーングラフがプラットフォームやその他の条件に基づいてグラフィックス API を選択するデフォルトの動作に戻すには、api をQSGRendererInterface::Unknown に設定します。

この関数は Qt 6.0 で導入されました。

graphicsApi()も参照してください 。

[since 6.0] void QQuickWindow::setGraphicsConfiguration(const QQuickGraphicsConfiguration &config)

このウィンドウのグラフィックス設定を指定します。`config ` には、基盤となるグラフィックスデバイスやコンテキストを初期化する際に、シーングラフが参照する可能性のあるさまざまな設定が含まれています。

たとえば、Vulkan で有効にするデバイス拡張機能を指定するといった追加の設定は、特定の拡張機能に依存するネイティブのグラフィックスレンダリングコードを統合する際に重要かつ不可欠となります。OpenXR などの外部 3D または VR エンジンと統合する場合も同様です。

注: setGraphicsDevice() を通じて既存のグラフィックスデバイスを採用する場合、シーングラフはそれらのオブジェクトの実際の構築を制御していないため、この設定は 無視されます。

QQuickGraphicsConfiguration インスタンスは暗黙的に共有され、コピー可能であり、値渡しで渡すことができます。

警告: QQuickWindow に対してQQuickGraphicsConfiguration を設定する場合は 、そのウィンドウに対してシーングラフが初めて初期化される前に、十分に早い段階で実行する必要があります。画面上のウィンドウの場合、これはQQuickWindow またはQQuickView に対してshow()を呼び出す前に、この呼び出しを行う必要があることを意味します。QQuickRenderControl の場合、initialize()を呼び出す前に設定を完了させる必要があります。

この関数は Qt 6.0 で導入されました。

graphicsConfiguration()も参照してください 。

[since 6.0] void QQuickWindow::setGraphicsDevice(const QQuickGraphicsDevice &device)

このウィンドウのグラフィックスデバイスオブジェクトを設定します。シーングラフは、新しいオブジェクトを作成する代わりに、device で指定された既存のデバイス、物理デバイス、およびその他のオブジェクトを使用します。

この関数は、`Qt Quick `のレンダリングをテクスチャにリダイレクトするために、`QQuickRenderControl `や`setRenderTarget()`と組み合わせて使用されることが非常に多い。

デフォルトで生成されたQQuickGraphicsDevice は、デフォルトの挙動を一切変更しません。QQuickGraphicsDevice::fromDeviceObjects()などのQQuickGraphicsDevice ファクトリ関数のいずれかを通じて作成されたdevice が渡され、シーングラフが対応するグラフィックスAPI(fromDeviceObjects()の例ではVulkan)を使用する場合、 シーングラフは、QQuickGraphicsDevice によってカプセル化された既存のデバイスオブジェクト(Vulkanの場合、VkPhysicalDevice 、VkDevice 、およびグラフィックスキューファミリーインデックスなど)を使用します。これにより、同じデバイスを使用できるようになり、Qt Quick とネイティブレンダリングエンジン間で、バッファやテクスチャなどのリソースを共有することが可能になります。

警告:この関数はシーングラフの 初期化前にのみ呼び出すことができ、初期化後に呼び出しても効果はありません。実際には、通常はQQuickRenderControl::initialize()の直前に呼び出すことになります。

例として、今回は Direct3D を使用する場合、一般的な使用方法は以下の通りになると予想されます:

// native graphics resources set up by a custom D3D rendering engine
ID3D11Device *device;
ID3D11DeviceContext *context;
ID3D11Texture2D *texture;
...
// now to redirect Qt Quick content into 'texture' we could do the following:
QQuickRenderControl *renderControl = new QQuickRenderControl;
QQuickWindow *window = new QQuickWindow(renderControl); // this window will never be shown on-screen
...
window->setGraphicsDevice(QQuickGraphicsDevice::fromDeviceAndContext(device, context));
renderControl->initialize();
window->setRenderTarget(QQuickRenderTarget::fromD3D11Texture(texture, textureSize);
...

この関数を使用する際の重要な点は、リソース、あるいはリソースへのハンドル(上記の例ではtexture )が、外部レンダリングエンジンとシーングラフレンダラーの両方から参照可能かつ使用可能であることを確保することです。これには、同じグラフィックスデバイス(または OpenGL の場合は OpenGL コンテキスト)を使用する必要があります。

QQuickGraphicsDevice インスタンスは暗黙的に共有され、コピー可能であり、値渡しで渡すことができます。インスタンスは、関連付けられたネイティブオブジェクト(例:例中の ID3D11Device)を所有するものではありません。

注: QQuickRenderControl を使用しても 、必ずしもこの関数を呼び出す必要があるわけではありません。既存のデバイスやコンテキストを採用する必要がない場合は、この関数を呼び出してはいけません。その場合、シーングラフは、画面上のQQuickWindow の場合と同様に、独自のデバイスとコンテキストを通常通り初期化します。

この関数は Qt 6.0 で導入されました。

関連項目: graphicsDevice()、QQuickRenderControl 、setRenderTarget()、およびsetGraphicsApi()。

void QQuickWindow::setPersistentGraphics(bool persistent)

persistent に対して、グラフィックスリソース(グラフィックスデバイスまたはコンテキスト、スワップチェーン、バッファ、テクスチャ)を保持し、最後のウィンドウが削除されるまで解放できないようにするかどうかを設定します。デフォルト値は true です。

releaseResources() を呼び出したとき、またはウィンドウが非表示になったとき(より具体的には、レンダリング不可能になったとき)、一部のレンダリングループでは、キャッシュされたものだけでなく、すべてのグラフィックスリソースを解放する可能性があります。 これにより一時的にメモリを解放できますが、ウィンドウが再びレンダリングが必要になった際、レンダリングエンジンはリソースの完全な再初期化を行わなければならず、その処理には多大なコストがかかる可能性があります。

注: ウィンドウがレンダリング不可能となる条件は 、プラットフォームおよびウィンドウマネージャによって異なります。

注: この設定に関係なく、最後の `QQuickWindow ` が削除されると、すべての グラフィックリソースが解放されます。

注:これは ヒントであり、確実に考慮されるとは限りません。

注:この ヒントは 、破棄して後で再作成するコストが比較的低いキャッシュされたリソースには適用されません。したがって、releaseResources() を呼び出すと、通常、このヒントの値に関係なく、それらのリソースが解放されます。

関連項目: isPersistentGraphics()、setPersistentSceneGraph()、sceneGraphInitialized()、sceneGraphInvalidated()、およびreleaseResources()。

void QQuickWindow::setPersistentSceneGraph(bool persistent)

シーングラフノードおよびリソースがpersistent であるかどうかを設定します。「Persistent」は、ノードおよびリソースが解放できないことを意味します。デフォルト値はtrue です。

releaseResources() を呼び出した際、ウィンドウが非表示(より具体的には、レンダリング不可)になると、一部のレンダリングループではシーングラフノードおよび関連するグラフィックリソースを解放する可能性があります。これにより一時的にメモリが解放されますが、次回ウィンドウがレンダリングされる際にシーングラフを再構築する必要が生じます。

注: ウィンドウがレンダリング不可能となる条件は 、プラットフォームおよびウィンドウマネージャによって異なります。

注: この設定にかかわらず、最後の `QQuickWindow ` が削除されると、シーングラフノードとリソースは 常に解放されます。

注:これは ヒントであり、必ず考慮されるとは限りません。

関連項目: isPersistentSceneGraph()、setPersistentGraphics()、sceneGraphInvalidated()、sceneGraphInitialized()、およびreleaseResources()。

[since 6.0] void QQuickWindow::setRenderTarget(const QQuickRenderTarget &target)

このウィンドウのレンダリングターゲットを `target` に設定します。

QQuickRenderTarget は、レンダリング可能なネイティブオブジェクト(最も一般的なのは2Dテクスチャ)およびピクセル単位のサイズなどの関連メタデータに対する不透明なハンドルとして機能します。

デフォルトで生成された `QQuickRenderTarget ` は、リダイレクトを行いません。一方、静的ファクトリ関数 `QQuickRenderTarget ` のいずれかを使用して作成された有効な `target` は、Qt Quick シーンのレンダリングのリダイレクトを可能にします。これにより、レンダリング先はウィンドウに関連付けられたサーフェスのカラーバッファではなく、`target` で指定されたテクスチャやその他のグラフィックスオブジェクトになります。

たとえば、シーングラフが Vulkan を使用してレンダリングしていると仮定すると、その出力をVkImage にリダイレクトすることができます。Vulkan のようなグラフィックス API の場合、画像レイアウトも指定する必要があります。QQuickRenderTarget インスタンスは暗黙的に共有され、コピー可能であり、値渡しで渡すことができます。 ただし、それらは関連するネイティブオブジェクト(例:この例での VkImage)を所有しているわけではありません。

QQuickRenderTarget rt = QQuickRenderTarget::fromVulkanImage(vulkanImage, VK_IMAGE_LAYOUT_PREINITIALIZED, pixelSize);
quickWindow->setRenderTarget(rt);

この関数は、QQuickRenderControl および非表示のQQuickWindow と組み合わせて使用されることが非常に多く、このQQuickWindow 用の画面上のネイティブウィンドウを作成することなく、Qt Quick のコンテンツをテクスチャにレンダリングするために使用されます。

目的のターゲットや、サイズなどの関連データが変更された場合は、新しい `QQuickRenderTarget` を指定してこの関数を呼び出してください。`QQuickRenderTarget ` インスタンスの構築やこの関数の呼び出しはコストが低いですが、異なるネイティブオブジェクトやその他のデータを含む新しい `target ` を設定すると、シーングラフが次のフレームをレンダリングしようとする際に、コストのかかる初期化処理が発生する可能性があることに注意してください。 したがって、ターゲットの変更は必要な場合にのみ行ってください。

注: ウィンドウは 、target で参照されるネイティブオブジェクトの所有権を取得しません。

注: target で参照されるネイティブオブジェクトが、シーングラフレンダラーに対しても有効であることを確認するのは、呼び出し側の責任です 。たとえば、Vulkan、Metal、および Direct3D の場合、これは、テクスチャや画像が、シーングラフが内部で使用しているのと同じグラフィックデバイス上で作成されていることを意味します。 したがって、既存のデバイスやコンテキスト上で作成されたテクスチャオブジェクトが関与する場合、この関数はsetGraphicsDevice()と組み合わせて使用されることがよくあります。

注:該当するグラフィックスAPIでは 、アプリケーションはシーングラフによって行われる画像レイアウトの遷移に注意を払う必要があります。例えば、この関数を呼び出して VkImage をシーングラフに関連付けると、フレームのレンダリング時にそのレイアウトは `VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL ` へ遷移します。

警告:この関数は 、レンダリングを行っているスレッドからのみ呼び出すことができます。

この関数は Qt 6.0 で導入されました。

関連項目: renderTarget()、QQuickRenderControl 、setGraphicsDevice()、およびsetGraphicsApi()。

[static] void QQuickWindow::setSceneGraphBackend(const QString &backend)

Qt Quick のシーングラフをbackend から取得します。バックエンドは、組み込みのものか、動的に読み込まれるプラグインとしてインストールされたもののいずれかになります。

注:この関数の呼び出しは 、アプリケーション内で最初のQQuickWindow を構築する前に実行する必要があります。一度構築されると、後から変更することはできません。

バックエンドの一覧に関する詳細については、「アプリケーションでのアダプテーションの切り替え」を参照してください。backend が無効である場合やエラーが発生した場合は、リクエストは無視されます。

注:この関数の呼び出しは 、QT_QUICK_BACKEND またはQMLSCENE_DEVICE 環境変数を設定することと同等です。ただし、他のプロセスを生成するアプリケーションでは、環境変数の継承を気にする必要がないため、この API を使用する方が安全です。

関連項目: sceneGraphBackend().

[static] void QQuickWindow::setTextRenderType(QQuickWindow::TextRenderType renderType)

Qt Quick 内のテキストのような要素のデフォルトのレンダリングタイプを、renderType に設定します。

注: レンダリングタイプの設定は 、その後作成される要素にのみ影響します。既存の要素のレンダリングタイプは変更されません。

textRenderType()も参照してください 。

[override virtual protected] void QQuickWindow::showEvent(QShowEvent *)

QWindow::showEvent(QShowEvent *ev) の再実装。

[since 6.6] QRhiSwapChain *QQuickWindow::swapChain() const

このウィンドウで使用されているQRhiSwapChain (存在する場合)を返します。

注: 標準のレンダリングループ(basic やthreaded など)のいずれかによって処理されるオンスクリーンウィンドウのみが スワップチェーンを持ちます。それ以外の場合は、戻り値は null になります。たとえば、ウィンドウがQQuickRenderControl で使用されている場合、結果は常に null になります。

この関数は Qt 6.6 で導入されました。

[override virtual protected] void QQuickWindow::tabletEvent(QTabletEvent *event)

QWindow::tabletEvent(QTabletEvent *ev) を再実装します。

[static] QQuickWindow::TextRenderType QQuickWindow::textRenderType()

Qt Quick 内のテキストのような要素のレンダリングタイプを返します。デフォルトは `QQuickWindow::QtTextRendering` です。

setTextRenderType()も参照してください 。

[slot] void QQuickWindow::update()

ウィンドウに対して、次のフレームをレンダリングするようスケジュールします。

QQuickWindow::update() の呼び出しは、QQuickItem::update() とは異なり、基になるシーングラフに変更があるかどうかに関わらず、常に再描画をトリガーします。

[override virtual protected] void QQuickWindow::wheelEvent(QWheelEvent *event)

QWindow::wheelEvent(QWheelEvent *ev) を再実装します。

© 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.