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 |
継承元: |
パブリックな型
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 } |
プロパティ
- activeFocusItem : QQuickItem* const
- color : QColor
- contentItem : QQuickItem* const
- transientParent : QWindow* const
パブリック関数
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 &) |
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 は、QQuickItems のシーンと対話し、表示するために必要なグラフィカルなシーン管理を提供します。
QQuickWindow は常に 1 つの不可視のルート アイテムを持っています。このウィンドウにアイテムを追加するには、アイテムをルート アイテムまたはシーン内の既存のアイテムに再ペアレントします。
QML ファイルから簡単にシーンを表示する方法については、QQuickView を参照してください。
レンダリング
QQuickWindow では、レンダリングに必要な情報をシーングラフで表現します。このシーングラフは QML シーンから切り離され、プラットフォームの実装によっては別のスレッドで動作します。レンダリング用のシーングラフは QML シーンとは独立しているため、QML シーンの状態に影響を与えることなく、完全に解放することも可能です。
sceneGraphInitialized ()シグナルは、QMLシーンが初めて画面にレンダリングされる前に、レンダリングスレッドで発行されます。レンダリングシーンのグラフが解放された場合、このシグナルは次のフレームがレンダリングされる前に再び発行されます。画面上に表示される QQuickWindow は、render loop
によって内部的に駆動されます。 は、シーングラフ内で複数の実装が提供されています。シーングラフのレンダリングプロセスの詳細については、Qt Quick Scene Graph を参照してください。
デフォルトでは、QQuickWindow は OpenGL や Vulkan などのアクセラレーションされた 3D グラフィックス API を使用してレンダリングします。シーングラフバックエンドとサポートされるグラフィックスAPIの詳細については、シーングラフの適応を参照してください。
警告 グラフィックス操作とシーングラフとのインタラクションは、主に updatePaintNode() フェーズの間、レンダリング スレッドのみで行われることが重要です。
警告 レンダリングに関連するシグナルの多くはレンダリングスレッドから発信されるため、接続はQt::DirectConnection を使用して行う必要があります。
高速3DグラフィックスAPIとの統合
QQuickWindowとその下にあるシーングラフが同じAPIを使用してレンダリングされている限り、OpenGL、Vulkan、Metal、またはDirect3D 11の呼び出しをQQuickWindowに直接統合することができます。デバイスやコンテキスト・オブジェクト・ハンドルなどのネイティブ・グラフィック・オブジェクトにアクセスするには、QSGRendererInterface を使用します。rendererInterface() を呼び出すことで、QQuickWindow からQSGRendererInterface のインスタンスを取得できます。この統合のためのイネーブラは、beforeRendering()、beforeRenderPassRecording()、afterRenderPassRecording() および関連するシグナルです。これらによって、アンダーレイ・オーバーレイのレンダリングが可能になります。また、QNativeInterface::QSGOpenGLTexture 、QNativeInterface::QSGVulkanTexture 、およびその他の類似クラスは、既存のネイティブテクスチャやイメージオブジェクトをシーングラフで使用できるQSGTexture 。
アクセラレーションなしのレンダリング
限定的で純粋なソフトウェアベースのレンダリングパスも利用できます。software
バックエンドを使用すると、Qt Quick の多くの機能が使用できなくなり、これらに依存する QML アイテムはまったくレンダリングされません。同時に、QQuickWindow は、3D グラフィック API がまったく利用できないシステムでも機能します。詳しくはQt Quick Software Adaptationを参照してください。
リダイレクト・レンダリング
QQuickWindow は、必ずしも画面上のネイティブ・ウィンドウにバックアップされているとは限りません。レンダリングは、指定されたネイティブ テクスチャなどのカスタム レンダー ターゲットにリダイレクトできます。これは、QQuickRenderControl クラスと、setRenderTarget()、setGraphicsDevice()、setGraphicsConfiguration() などの関数を組み合わせて実現します。
この場合、QQuickWindowはシーンを表し、フレームをレンダリングするためのインフラストラクチャを提供します。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 を指定することができますが、Window 要素とApplicationWindow 要素を使用することで、QML からウィンドウを作成することもできます。この場合、ウィンドウインスタンスの生成にC++のコードは関与しませんが、アプリケーションは、例えば、指定されたOpenGLのバージョンやプロファイルを要求するために、特定のサーフェスフォーマットの値を設定したいと思うかもしれません。そのようなアプリケーションは、起動時に静的関数QSurfaceFormat::setDefaultFormat ()を呼び出すことができます。指定されたフォーマットは、その後に作成されるすべてのQuickウィンドウに使用されます。
Vulkanインスタンス
Vulkan を使用する場合、QQuickWindow は自動的にシーングラフによって内部的に作成および管理されるQVulkanInstance に関連付けられます。このように、ほとんどのアプリケーションは、VkInstance
が利用可能であることを心配する必要はありません。高度なケースでは、アプリケーションは、特定の方法で設定するために、独自のQVulkanInstance を作成することができます。それも可能である。QQuickWindow を構築した直後、それを表示する前にsetVulkanInstance() を呼び出すと、アプリケーショ ンが提供するQVulkanInstance (およびその基礎となるVkInstance
)が使用されます。QQuickRenderControl 経由でリダイレクトする場合、QVulkanInstance は自動的に提供されません。
グラフィックス・コンテキストとデバイス
シーングラフが初期化されるとき(通常、ウィンドウが公開されるとき、またはリダイレクトされたレンダリングの場合は初期化が実行されます)via QQuickRenderControl 、レンダリングに必要なコンテキストまたはデバイスオブジェクトが自動的に作成されます。これには、OpenGLコンテキスト、Direct3Dデバイスおよびデバイスコンテキスト、VulkanおよびMetalデバイスが含まれます。これらは、QSGRendererInterface を介して、その後アプリケーションコードから照会することもできます。すべてのレンダリングを GUI スレッドで実行するbasic
レンダー ループを使用する場合、すべての表示可能な QQuickWindows で同じコンテキストまたはデバイスが使用されます。threaded
レンダー・ループでは、レンダリング・スレッドごとに専用のコンテキストまたはデバイス・オブジェクトが使用されるため、QQuickWindow ごとに同じコンテキストまたはデバイスが使用されます。グラフィックス API の中には、setGraphicsConfiguration() を使用してカスタマイズできるものがあります。これにより、たとえば、VkDevice
で有効にする Vulkan 拡張機能のリストを指定することができます。また、QQuickWindow が独自に構築するのではなく、QQuickWindow が使用する既存のコンテキスト オブジェクトまたはデバイス オブジェクトのセットを提供することもできます。これは、setGraphicsDevice() を使用して実現できます。
QQuickView,QQuickRenderControl,QQuickRenderTarget,QQuickGraphicsDevice,QQuickGraphicsConfiguration, およびQSGRendererInterfaceも参照して ください。
メンバ・タイプのドキュメント
enum QQuickWindow::CreateTextureOption
flags QQuickWindow::CreateTextureOptions
CreateTextureOption 列挙型は、テクスチャのラッピングをカスタマイズするために使用します。
定数 | 値 | 説明 |
---|---|---|
QQuickWindow::TextureHasAlphaChannel | 0x0001 | テクスチャはアルファチャンネルを持ち、ブレンディングを使って描画されるべきです。 |
QQuickWindow::TextureHasMipmaps | 0x0002 | テクスチャはミップマップを持ち、ミップマップを有効にして描画できます。 |
QQuickWindow::TextureOwnsGLTexture | 0x0004 | Qt 6.0 では、このフラグは実際には使用されず、無視されます。QSGTexture Qt Quick は、そのようなオブジェクトと関連するメモリがどのように解放されるべきかについて、必要な詳細を持っていない可能性があるためです。 |
QQuickWindow::TextureCanUseAtlas | 0x0008 | 画像はテクスチャアトラスにアップロードすることができます。 |
QQuickWindow::TextureIsOpaque | 0x0010 | テクスチャはQSGTexture::hasAlphaChannel() に対して false を返し、ブレンドされません。このフラグは Qt 5.6 で追加されました。 |
CreateTextureOptions 型はQFlags<CreateTextureOption> の typedef です。CreateTextureOption 値の OR の組み合わせを格納します。
enum QQuickWindow::RenderStage
定数 | 値 | 説明 |
---|---|---|
QQuickWindow::BeforeSynchronizingStage | 0 | 同期前 |
QQuickWindow::AfterSynchronizingStage | 1 | 同期後 |
QQuickWindow::BeforeRenderingStage | 2 | レンダリング前 |
QQuickWindow::AfterRenderingStage | 3 | レンダリング後。 |
QQuickWindow::AfterSwapStage | 4 | フレームが入れ替わった後。 |
QQuickWindow::NoStage | 5 | できるだけ早く。この値は Qt 5.6 で追加されました。 |
シーングラフとレンダリングも参照してください 。
enum QQuickWindow::SceneGraphError
この列挙型は、sceneGraphError() シグナルのエラーを記述する。
定数 | 値 | 説明 |
---|---|---|
QQuickWindow::ContextNotAvailable | 1 | グラフィックスコンテキストの作成に失敗しました。これは通常、適切なOpenGL実装が見つからなかったことを意味します。例えば、グラフィックスドライバがインストールされていないため、OpenGL 2のサポートが存在しません。OpenGL ESを使用するモバイルボードや組み込みボードでは、このようなエラーはウィンドウシステムの統合に問題があり、Qtの設定が正しくない可能性があります。 |
enum QQuickWindow::TextRenderType
この列挙型は、Qt Quick (Text 、TextInput など)のテキストのような要素のデフォルトのレンダリングタイプを記述します。
テキストをターゲット プラットフォーム上でネイティブに見せることを好み、テキストの変換などの高度な機能を必要としない場合は、NativeTextRendering を選択します。こ の よ う な機能を NativeTextRendering レ ン ダータ イ プ と 組み合わせて使用す る と 、 結果が貧弱にな り 、 場合に よ っ ては ピ ク セル化 し ます。
QtTextRendering
とCurveTextRendering
はどちらもハードウェアアクセラレーション技術です。QtTextRendering
は 2 つのうちで高速ですが、より多くのメモリを使用し、大きなサイズではレンダリングアーチファクトが発生します。CurveTextRendering
は、QtTextRendering
で良好な視覚結果が得られない場合や、グラフィックスメモリ消費量の削減が優先される場合の代替手段として考慮する必要があります。
定数 | 値 | 説明 |
---|---|---|
QQuickWindow::QtTextRendering | 0 | Qt 独自のラスタライズアルゴリズムを使用します。 |
QQuickWindow::NativeTextRendering | 1 | テキストにはオペレーティング・システムのネイティブ・ラスタライザを使用します。 |
QQuickWindow::CurveTextRendering | 2 | テキストは、グラフィックスハードウェア上で直接動作するカーブラスタライザを使用してレンダリングされます。(Qt 6.7.0 で導入されました)。 |
プロパティ ドキュメント
[read-only]
activeFocusItem : QQuickItem* const
このプロパティは、現在アクティブなフォーカスを持つ項目を保持し、アクティブなフォーカスを持つ項目がない場合はnull
を保持する。
アクセス関数
QQuickItem * | activeFocusItem() const |
Notifier シグナル:
void | activeFocusItemChanged() |
Qt Quick のQQuickItem::forceActiveFocus() およびKeyboard Focusも参照のこと 。
color : QColor
このプロパティは、各フレームの開始時にカラーバッファをクリアするために使用される色を保持します。
デフォルトでは、クリア色は白です。
アクセス関数
QColor | color() const |
void | setColor(const QColor &color) |
通知シグナル:
void | colorChanged(const QColor &) |
setDefaultAlphaBuffer()も参照 。
[read-only]
contentItem : QQuickItem* const
このプロパティは、シーンの不可視ルートアイテムを保持する。
QQuickWindow は常に、そのすべてのコンテンツを含む単一の不可視ルート アイテムを持っています。このウィンドウにアイテムを追加するには、アイテムを contentItem またはシーン内の既存のアイテムに再ペアレントします。
アクセス関数
QQuickItem * | contentItem() const |
transientParent : QWindow* const
このプロパティは、このウィンドウが一時的なポップアップであるウィンドウを保持する。
これはウィンドウマネージャに対して、このウィンドウが一時的な親のためのダイアログまたはポップアップであることを示すヒントであり、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
このウィンドウのアクセシビリティ・インターフェースを返します。
[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() およびScene Graph - RHI Under QMLも参照して ください。
[signal]
void QQuickWindow::afterRendering()
このシグナルは、シーングラフがコマンドバッファにコマンドを追加した後に発行されます。必要であれば、このシグナルに接続されたスロット関数は、QSGRendererInterface を介して、コマンドバッファのようなネイティブリソースに問い合わせることができます。しかし、レンダーパス(またはパス)は、この時点ですでに記録されており、シーングラフのパス内にコマンドを追加することはできないことに注意してください。代わりに、afterRenderPassRecording ()を使用してください。そのため、Qt 6では、Qt 5とは異なり、このシグナルの使用は限られています。むしろ、beforeRendering ()とbeforeRenderPassRecording ()、またはbeforeRendering ()とafterRenderPassRecording ()の組み合わせが、カスタムレンダリングのアンダーレイ・オーバーレイを実現するために一般的に使用されます。
警告 このシグナルは、シーングラフのレンダリングスレッドから発行されます。実行を続行する前にスロット関数を終了する必要がある場合は、接続が直接であることを確認する必要があります(Qt::ConnectionType を参照)。
注意: OpenGLを使用する場合、OpenGL 3.xまたは4.x固有のステートを設定し、接続されたスロットから戻るときに、これらを有効にしたり、デフォルト以外の値に設定したままにすると、シーングラフのレンダリングに干渉する可能性があることに注意してください。シーングラフによるレンダリングに使用されるQOpenGLContext は、シグナルが発せられるときにバインドされます。
rendererInterface()、Scene Graph - RHI Under QML、Scene Graph - OpenGL Under QML、Scene Graph - Metal Under QML、Scene Graph - Vulkan Under QML、Scene Graph - Direct3D 11 Under QMLも参照して ください。
[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() およびScene Graph - RHI Under QMLも参照して ください。
[signal]
void QQuickWindow::beforeRendering()
このシグナルは、フレームの準備が完了した後に発行されます。つまり、該当する場合、記録モードのコマンドバッファが存在することを意味します。必要であれば、このシグナルに接続されたスロット関数は、QSGRendererInterface を介して、以前のコマンドのようにネイティブリソースに問い合わせることができます。ただし、この時点ではメインレンダーパスの記録はまだ開始されておらず、そのパス内でコマンドを追加することはできないことに注意してください。パスの開始は、カラー、深度、およびステンシルバッファをクリアすることを意味するため、このシグナルに接続するだけでは、アンダーレイタイプのレンダリングを実現することはできません。むしろ、beforeRenderPassRecording ()に接続します。しかし、コピータイプのコマンドを記録したい場合は、レンダーパスの中でキューに入れることができないので、このシグナルに接続することは重要です。
警告 このシグナルは、シーングラフのレンダリングスレッドから発行されます。実行を継続する前にスロット関数を終了する必要がある場合は、接続が直接であることを確認する必要があります(Qt::ConnectionType を参照)。
注意: OpenGLを使用する場合、OpenGL 3.xまたは4.x固有のステートを設定し、接続されたスロットから戻るときにこれらを有効にしたり、デフォルト以外の値に設定したままにすると、シーングラフのレンダリングに干渉する可能性があることに注意してください。シーングラフによるレンダリングに使用されるQOpenGLContext は、シグナルが発せられるときにバインドされます。
rendererInterface()、Scene Graph - RHI Under QML、Scene Graph - OpenGL Under QML、Scene Graph - Metal Under QML、Scene Graph - Vulkan Under QML、Scene Graph - Direct3D 11 Under QMLも参照して ください。
[signal]
void QQuickWindow::beforeSynchronizing()
このシグナルはシーングラフがQMLの状態と同期する前に発行されます。
このシグナルがシーングラフのレンダリングスレッドから発せられるとしても、GUIスレッドはQQuickItem::updatePaintNode ()のようにブロックされることが保証されています。従って、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()関数の代替となります。
この関数とendExternalCommands() を呼び出すことは、QSGRenderNode のrender() 実装内では必要ありません。なぜなら、シーングラフはレンダーノードに対して暗黙のうちに必要なステップを実行するからです。
ネイティブ・グラフィック・オブジェクト(グラフィック・デバイス、コマンド・バッファ、エンコーダなど)には、QSGRendererInterface::getResource ()を介してアクセスできます。
警告 beginExternalCommands() -endExternalCommands() の間で、QSGRendererInterface::CommandListResource が異なるオブジェクトを返すことがあるので注意してください。これは、基礎となる実装が、レンダーパス内の外部グラフィックスコマンドを記録するための専用のセカンダリコマンドバッファを提供している場合に発生する可能性があります。したがって、この関数を呼び出した後は、常に CommandListResource にクエリを実行してください。以前のクエリからオブジェクトを再利用しようとしないでください。
注意: シーングラフがOpenGLを使用している場合、コンテキストのOpenGLステートは任意の設定を持つことができ、この関数はステートをデフォルトに戻すリセットを実行しないという事実に注意してください。
endExternalCommands() およびQQuickOpenGLUtils::resetOpenGLState()も参照してください 。
[override virtual protected]
void QQuickWindow::closeEvent(QCloseEvent *e)
再インプリメント:QWindow::closeEvent(QCloseEvent *ev).
QSGImageNode *QQuickWindow::createImageNode() const
単純なイメージ・ノードを作成する。scenegraph が初期化されていない場合、戻り値は null です。
これは、QSGSimpleTextureNode を直接構築するクロスバックエンド代替手段です。
QSGImageNodeも参照してください 。
QSGNinePatchNode *QQuickWindow::createNinePatchNode() const
ナイン・パッチ・ノードを作成する。scenegraph が初期化されていない場合、戻り値は null です。
QSGRectangleNode *QQuickWindow::createRectangleNode() const
単純な矩形ノードを作成する。scenegraph が初期化されていない場合、戻り値は null です。
これは、QSGSimpleRectNode を直接構築するクロスバックエンド代替手段です。
QSGRectangleNodeも参照してください 。
[since 6.7]
QSGTextNode *QQuickWindow::createTextNode() const
テキスト・ノードを作成する。scenegraph が初期化されていない場合、戻り値は 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 が含まれている場合、 エンジンは RGB テクスチャを作成し、QSGTexture::hasAlphaChannel() に対して false を返します。ほとんどの場合、不透明テクスチャの方がレンダリング速度が速くなります。このフラグが設定されていない場合、テクスチャは画像のフォーマットに基づいたアルファチャンネルを持ちます。
options がTextureHasMipmaps を含む場合、エンジンはミップマップフィルタリングを使用できるテクスチャを作成します。ミップマップされたテクスチャをアトラスに含めることはできません。
options でTextureHasAlphaChannel を設定しても、アルファチャンネルとブレンディングがデフォルトなので、この機能には意味がありません。これを避けるには、TextureIsOpaque を設定します。
シーングラフがOpenGLを使用する場合、返されるテクスチャはテクスチャターゲットとしてGL_TEXTURE_2D
、内部フォーマットとしてGL_RGBA
。他のグラフィックスAPIでは、テクスチャフォーマットは通常RGBA8
。異なるパラメータでテクスチャを作成するには、QSGTexture を再実装してください。
警告 シーングラフがまだ初期化されていない場合、この関数は 0 を返します。
警告:この関数は、シーングラフがまだ初期化されていない場合、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-basedadaptation を使用している場合にのみ機能します。それ以外の場合の戻り値はnullptr
である。
注意: この関数は、シーングラフ・レンダースレッドでのみ呼び出すことができます。
この関数は Qt 6.6 で導入されました。
createTextureFromImage(),sceneGraphInitialized(),QSGTextureも参照してください 。
qreal QQuickWindow::effectiveDevicePixelRatio() const
このウィンドウのデバイスピクセル比率を返す。
これはQWindow::devicePixelRatio() とは異なり、QQuickRenderControl とQQuickRenderTarget を介したリダイレクトレンダリングをサポートする。QQuickRenderControl を使用する場合、QQuickWindow は完全には作成されないことが多い。つまり、表示されることはなく、ウィンドウシステムで作成される基本的なネイティブウィンドウは存在しない。その結果、デバイスのピクセル比率のようなプロパティを照会しても、正しい結果は得られません。この関数は、QQuickRenderControl::renderWindowFor ()とQQuickRenderTarget::devicePixelRatio ()の両方を考慮する。リダイレクトが有効でない場合、結果はQWindow::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()関数の代替となります。
この関数とbeginExternalCommands() を呼び出すことは、QSGRenderNode のrender() 実装内では必要ありません。なぜなら、シーングラフはレンダーノードに対して暗黙のうちに必要なステップを実行するからです。
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によって、ネイティブOpenGLがQtの制御外で破棄された場合です。
このシグナルはシーングラフのレンダリングスレッドから発せられます。
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 enum に対応する値を持つバックエンドをカバーします。
この関数がまったく呼び出されず、同等の環境変数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 インスタンスは暗黙的に共有され、コピー可能で、値で渡すことができます。
警告 QQuickGraphicsConfiguration シーングラフがそのウィンドウのために初めて初期化される前に、QQuickWindow 。オンスクリーンウィンドウの場合、これは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 ファクトリ関数の 1 つを介して作成された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 と組み合わせて、Qt Quick コンテンツをテクスチャにレンダリングするために、このQQuickWindow のための画面上のネイティブウィンドウを作成することなく、非常に頻繁に使用されます。
希望するターゲット、またはサイズなどの関連データが変更されたら、新しい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 scenegraphbackend をリクエストする。バックエンドはビルトインされるか、動的にロードされるプラグインの形でインストールされる。
これはオーバーロードされた関数です。
注意: この関数の呼び出しは、アプリケーションで最初の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).
© 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.