QQuickWindow Class
QQuickWindowクラスは、グラフィカルなQMLシーンを表示するためのウィンドウを提供します。詳細...
Header: | #include <QQuickWindow> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Quick) target_link_libraries(mytarget PRIVATE Qt6::Quick) |
qmake: | QT += quick |
In QML: | Window |
Inherits: | QWindow |
Inherited By: |
パブリックタイプ
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 アイテムはまったくレンダリングされません。同時に、QuickWindow は、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++のコードは関与しませんが、アプリケーションは特定のサーフェスフォーマットの値を設定したい場合があります。そのようなアプリケーションは、起動時に静的関数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 では、このフラグは実際には使用されず、無視されます。QSGTextureQt 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 で導入されました)。 |
プロパティ Documentation
[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) |
Notifier シグナル:
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()
rawグラフィックス(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
単純なイメージ・ノードを作成します。シーングラフが初期化されていない場合、戻り値は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 を含む場合、 エンジンは 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)
再リンプルメント: (QExposeEvent *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
setGraphicsDevice() に渡されたQQuickGraphicsDevice か、そうでない場合はデフォルトで構築されたものを返します。
この関数は 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)
再リンプルメント: (QMouseEvent *ev):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 scenegraph バックエンドを返します。
注意: この関数の返り値は、アプリケーションの最初の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 。唯一の例外は、ネイティブOpenGLがEGL_CONTEXT_LOSTなどによって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 インスタンスは暗黙的に共有され、コピー可能で、値で渡すことができます。
警告 QQuickWindow のQQuickGraphicsConfiguration の設定は、シーングラフがそのウィンドウのために初めて初期化される前に、十分に早い段階で行われなければなりません。オンスクリーンウィンドウの場合、これはQQuickWindow またはQQuickView でshow() を呼び出す前に呼び出されなければならないことを意味します。QQuickRenderControl の場合、initialize() を呼び出す前に設定を確定しなければなりません。
この関数は Qt 6.0 で導入されました。
graphicsConfiguration()も参照してください 。
[since 6.0]
void QQuickWindow::setGraphicsDevice(const QQuickGraphicsDevice &device)
このウィンドウのグラフィックス・デバイス・オブジェクトを設定します。シーングラフは、新しいオブジェクトを作成する代わりに、device で指定された既存のデバイス、物理デバイス、その他のオブジェクトを使用します。
この関数は、QQuickRenderControl やsetRenderTarget() と組み合わせて、Qt Quick のレンダリングをテクスチャにリダイレクトするためによく使用されます。
デフォルトで作成された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 は、リダイレクトがないことを意味します。target一方、静的なQQuickRenderTarget ファクトリ関数の 1 つを介して作成された有効なtarget は、Qt Quick シーンのレンダリングのリダイレクトを可能にします。
例えば、シーングラフがレンダリングにVulkanを使用していると仮定すると、その出力をVkImage
にリダイレクトすることができます。VulkanのようなグラフィックスAPIでは、イメージレイアウトも提供する必要があります。QQuickRenderTarget インスタンスは暗黙的に共有され、コピー可能で、値で渡すことができます。ただし、関連するネイティブオブジェクト(例の VkImage など)は所有しません。
QQuickRenderTarget rt = QQuickRenderTarget::fromVulkanImage(vulkanImage, VK_IMAGE_LAYOUT_PREINITIALIZED, pixelSize); quickWindow->setRenderTarget(rt);
QQuickWindowこの関数は、QQuickRenderControl および不可視の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 scenegraphbackend をリクエストします。バックエンドはビルトインされるか、動的にロードされるプラグインの形でインストールされます。
これはオーバーロードされた関数です。
注意: この関数の呼び出しは、アプリケーションで最初のQQuickWindow を構築する前に行わなければなりません。その後に変更することはできません。
バックエンドのリストの詳細については、アプリケーションの適応の切り替えを参照してください。backend が無効であるかエラーが発生した場合、リクエストは無視されます。
注意: この関数を呼び出すことは、QT_QUICK_BACKEND
またはQMLSCENE_DEVICE
環境変数を設定することと同じです。しかし、このAPIは、環境継承を気にする必要がないため、他のプロセスをスポーンするアプリケーションで使用する方が安全である。
sceneGraphBackend()も参照のこと 。
[static]
void QQuickWindow::setTextRenderType(QQuickWindow::TextRenderType renderType)
Qt Quick の text-like 要素のデフォルトのレンダリングタイプをrenderType に設定します。
注意: レンダリングタイプの設定は、その後に作成される要素にのみ影響します。
textRenderType()も参照してください 。
[override virtual protected]
void QQuickWindow::showEvent(QShowEvent *)
再実装:QWindow::showEvent(QShowEvent *ev).
[since 6.6]
QRhiSwapChain *QQuickWindow::swapChain() const
もしあれば、このウィンドウによって使用されるQRhiSwapChain を返します。
注意: 標準のレンダリングループ(basic
やthreaded
など)の1つによってバックアップされたオンスクリーンウィンドウだけがスワップチェーンを持ちます。それ以外の場合、返される値はNULLです。例えば、ウィンドウがQQuickRenderControl で使用されている場合、結果は常に null です。
この関数は Qt 6.6 で導入されました。
[override virtual protected]
void QQuickWindow::tabletEvent(QTabletEvent *event)
この関数は Qt 6.6 で導入されました: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)を再実装しています。
本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。