このページの内容

変更点Qt Quick

Qt 6 における変更点は、フレームワークをより効率的で使いやすくするための意識的な取り組みの結果です。

各リリースにおいて、すべての公開 API についてバイナリおよびソースの互換性を維持するよう努めています。しかし、Qt をより優れたフレームワークにするための取り組みにおいて、一部の変更は避けられませんでした。

このトピックでは、Qt Quick におけるそれらの変更点をまとめ、それらに対処するための指針を示します。

Qt Quick における変更点QML タイプ

font.weight の型の変更

font.weight の型がint に変更されました。事前定義されたウェイトクラスは引き続き存在しますが、任意の整数を使用して、これらのウェイトクラスのいずれにも一致しないフォントを選択できるようになりました。これにより、C++ API との整合性が確保されます。C++ API では、以前からフォントのウェイトを任意の整数で表現することが可能でした。

文字列から列挙型値への暗黙の型変換が使用されていた場合を除き、ほとんどのコードはこの変更の影響を受けません。

font.weight: "Bold"

このようなコードは正しく解析されなくなるため、以下に示すように、同等の列挙型値に置き換える必要があります。

font.weight: Font.Bold

FontLoader.name は読み取り専用プロパティになりました

Qt 5 では、FontLoader のname プロパティは書き込み可能であり、設定されるとアイテムの source プロパティを上書きしていました。これにより、その目的に関していくつかの混乱が生じ、競合するプロパティのセッター間でレースコンディションが発生した場合、非決定的な挙動を引き起こす可能性がありました。

これにより、以下のようなコードは動作しなくなります。

FontLoader {
    id: fontLoader
    name: "Helvetica"
}

Text {
    font.family: fontLoader.name
    text: "Foobar"
}

代わりに、フォントファミリー名を格納するにはカスタムプロパティを使用してください。

property string fontName: "Helvetica"

Text {
    font.family: fontName
    text: "Foobar"
}

OpenGLInfo QML タイプが削除されました

Qt 5.8 では OpenGLInfo は非推奨となり、Qt 6 では削除されました。代わりにGraphicsInfo を使用してください。

ShaderEffect はインライン GLSL シェーダー文字列をサポートしなくなりました

custom materials と同様に、エフェクトは GLSL シェーダー文字列の形式では指定されなくなりました。 その代わりに、シェーダーは、qsb コマンドラインツールなど、QtのShader Toolsモジュールに含まれるツールによってプリプロセスされることが想定されています。これにより、実行時にどのグラフィックスAPI(Vulkan、Metal、OpenGL、またはDirect 3D)が使用されていても、シェーダーアセットを確実に利用できるようになります。ShaderEffect アイテムは、その結果として生成される.qsb ファイルを参照することが想定されています。

ShaderEffectのソースプロパティがURLになりました

ShaderEffect のプロパティであるvertexShader およびfragmentShader は、いずれも型がQByteArray からQUrl に変更されました。これにより、これらの挙動はImage.source などの他の同様のプロパティと同一になりました。file またはqrc スキーマを介してファイルを参照する既存のコードは、そのまま動作し続けます。さらに、この変更により、コンポーネント(.qmlファイル)の場所を基準とした相対パスでファイルを参照できるようになりました。 したがって、file: スキームの指定は現在、オプションとなっています。

Qt Quick のC++ APIの変更

xml-ph-0000@deepl.internal C++ API の変更点

QQuickItemの geometryChanged() 関数は、geometryChange() に名称が変更されました。

QQuick* API の変更

  • 独自の Vulkan、Metal、または Direct3D レンダリングコマンドセットを統合したいアプリケーションは、QQuickWindow::beforeRendering() および afterRendering() に加えて、新しいQQuickWindow シグナルに注意する必要があります。 Qt 5 における、単に `just beforeRendering` または `afterRendering` に接続するという従来のパターンは、それだけでは不十分な場合が多く、`beforeRenderPassRecording()` や `afterRenderPassRecording()` などの追加のシグナルへの接続によって補完する必要があるでしょう。
  • QQuickWindow::beforeRendering() や afterRendering() シグナルに依存して独自の OpenGL レンダリングコマンドを発行するアプリケーションは、OpenGL 呼び出しの前にQQuickWindow::beginExternalCommands() を、その後にQQuickWindow::endExternalCommands() を呼び出す必要があります。これにより、アプリケーションコードによる状態の変更が、シーングラフ・レンダラー自身のキャッシュされた状態との間で混乱を引き起こすことを防げます。 ただし、Qt 5 と同様に、Qt Quick レンダラーで使用されていない OpenGL 3.x または 4.x の状態を変更すると、依然として予期しない問題が発生する可能性があるため、アプリケーションでは、これらのシグナルに接続されたスロットやラムダから戻る前に、そのような OpenGL 状態をすべてデフォルト値にリセットすることを推奨します。
  • 既存のQQuickWindow::setRenderTarget()のオーバーロードおよび関連するゲッターは削除され、QQuickRenderTarget を引数とする新しい関数に置き換えられました。QQuickRenderControl と組み合わせてリダイレクトレンダリングを行うアプリケーションでは、OpenGLに依存しない方法でレンダリングターゲットを指定するために、この新しい関数を使用することが求められます。
  • QSGRendererInterface::GraphicsApi 引数を取るQQuickWindow::setSceneGraphBackend()のオーバーロードは、setGraphicsApi()に名称が変更されました。
  • QQuickWindow の関数 setPersistentOpenGLContext および isPersistentOpenGLContext は名称が変更され、QQuickWindow::setPersistentGraphics() およびQQuickWindow::isPersistentGraphics() となりました。
  • QQuickWindow から setClearBeforeRendering() および clearBeforeRendering() が削除されました。Qt 6 では、カラーバッファのクリアをスキップするオプションはありません。Qt 5 では、アンダーレイと組み合わせて使用する場合、Qt Quick によってカラーバッファにレンダリングされた内容がクリアされるのを防ぐために、setClearBeforeRendering() の呼び出しがしばしば必要でした。 Qt 6 では、より堅牢なアプローチが用意されています。それは、クリア処理の後、Qt Quick のコンテンツがレンダリングされる前に発火するbeforeRenderPassRecording() シグナルに接続することです。
  • QQuickWindow::openglContext() 関数は削除されました。アプリケーションがシーングラフがレンダリングに OpenGL を使用していることを確認したら、QSGRendererInterface::getResource() からQOpenGLContext を照会できます。
  • QQuickWindow::openglContextCreated() シグナルが削除されました。
  • 非推奨となっていた QQuickWindow::createTextureFromId() 関数が削除されました。 代わりに、QPlatformInterface::QSGOpenGLTexture、QPlatformInterface::QSGVulkanTexture、QPlatformInterface::QSGD3D11Texture、または QPlatformInterface::QSGMetalTexture の fromNative() 関数を使用してください。
  • QQuickFramebufferObject クラスはAPIの変更なく利用可能ですが、シーングラフがOpenGLでレンダリングされている場合にのみ機能します。VulkanやMetalなどの他のグラフィックスAPIを使用している場合は機能しません。QQuickFramebufferObject に依存しているアプリケーションは、main()関数内でQQuickWindow::setGraphicsApi(QSGRendererInterface::OpenGL) を呼び出すことで、OpenGLの使用を強制する必要があります。
  • QQuickRenderControl APIが若干変更されました。grab()は削除され、該当する場合は代わりにQQuickWindow::grabWindow()を使用してください。initialize()関数は、QOpenGLContext を受け付けなくなりました。また、アプリケーションでは、必要に応じてQQuickRenderControl::beginFrame()およびQQuickRenderControl::endFrame()を呼び出す必要があります。マルチサンプリングを行う場合は、新しい関数QQuickRenderControl::setSamples()を呼び出してサンプル数を指定する必要があります。
  • 既存のネイティブグラフィックスデバイスやコンテキストオブジェクトと組み合わせてQt Quick レンダリングを実行したいアプリケーションは、QQuickRenderControl がinitialize(QOpenGLContext*) 関数を提供しなくなったため、新しいQQuickWindow::setGraphicsDevice()関数を使用する必要があります。
  • QQuickPaintedItem およびContext2D をFramebuffer モードに設定しても効果はありません。モードがデフォルトの Image モードに設定されているかのように動作します。
  • Qt 6.0 では環境変数 `QSG_NO_DEPTH_BUFFER ` は引き続きサポートされていますが、その使用に代えて、`QQuickGraphicsConfiguration ` に対して `setDepthBufferFor2D()` を呼び出し、その結果を `QQuickWindow` に関連付ける方法の使用が推奨されます。

QSG* API の変更

  • QSGMaterialShader のインターフェースが変更されました。実装では、もはや OpenGL に依存してはならず、現在削除された `updateState()` などの関数が、QOpenGLContext が設定された状態で呼び出されることを前提にしてはなりません。新しいデータ指向のインターフェースでは、`updateState()` は `updateUniformData()`、`updateSampledImage()`、および `updateGraphicsPipelineState()` に置き換えられています。 文字列として提供される GLSL シェーダーコードの代わりに、シェーダーは、qsb コマンドラインツールなど、Qt の `Shader Tools ` モジュールに含まれるツールによってプリプロセスされることが想定されています。これにより、実行時にどのグラフィックス API(Vulkan、Metal、OpenGL、または Direct 3D)が使用されていても、シェーダーアセットが確実に利用できるようになります。
  • QSGEngineは削除されました。万が一、このクラスを利用しているアプリケーションがある場合は、代わりにQQuickRenderControl を使用するように移植することを推奨します。
  • QSGAbstractRendererはパブリックではなくなりました。このクラスの使用はQSGEngineと組み合わせて使用する場合にのみ意味がありましたが、そのクラスが削除されたため、QSGAbstractRendererは再びプライベートに戻されました。
  • 利便性向上のためのクラスである QSGSimpleMaterial は削除されました。アプリケーションでは、代わりに、改訂され、OpenGL に依存しないQSGMaterial API を使用することが推奨されます。
  • QSGTexture の基盤となるネイティブテクスチャオブジェクトにアクセスするために、textureId()は使用できなくなりました。 代わりに、QSGTexture::platformInterface() を QPlatformInterface::QSGOpenGLTexture、QPlatformInterface::QSGVulkanTexture、QPlatformInterface::QSGD3D11Texture、または QPlatformInterface::QSGMetalTexture とともに使用してください。
  • QSGImageNode のサブクラスは、setAnisotropyLevel() や anisotropyLevel() などの新たに追加された仮想関数をオーバーライドすることが必須となりました。
  • QSGTexture のサブクラスは、再設計が必要になる可能性が高いです。bind() や updateBindOptions() といった OpenGL 固有の仮想関数のいくつかは廃止されましたが、comparisonKey() など、実装が必須となる新しい仮想関数が追加されています。

OpenGLの使用に関する変更点Qt Quick

多くのアプリケーションにとって互換性の問題は生じませんが、アプリケーション開発者は、Qt 6におけるQt Quick レンダリングにおいて、OpenGLがもはや常にデフォルトの選択肢ではないことに留意する必要があります。software バックエンドを使用しない限り、Qt Quick アプリケーションは実行時にOpenGL、Vulkan、Metal、またはDirect3D 11のいずれかを使用する可能性があります。QSG_RHI_BACKEND 環境変数やQQuickWindow::setSceneGraphBackend()関数を通じて明示的な指定が行われない場合、Qt Quick によってプラットフォーム固有のデフォルトが選択されます。

詳細については、「Qt Quick 」のシーングラフおよび「Qt Quick 」のシーングラフのデフォルトレンダラーのページをご覧ください。

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