変更点Qt Quick

Qt 6 は、フレームワークをより効率的で使いやすくするための意識的な努力の結果です。

私たちは各リリースにおいて、すべてのパブリックAPIのバイナリとソースの互換性を維持しようと努めています。しかし、Qt をより良いフレームワークにするために避けられない変更もあります。

このトピックでは、Qt Quick におけるそれらの変更点をまとめ、それらを扱うためのガイダンスを提供します。

Qt Quick QML タイプの変更

font.weight の型の変更

font.weight の型がint に変更されました。定義済みのウェイトクラスはまだ存在しますが、ウェイトクラスのどれにも当てはまらないフォントを選択するために、任意の整数を使うことができるようになりました。こ れに よ り 、 フ ォ ン ト の太 さ を任意の整数で表す こ と がで き ていた C++ API と の整合性が保たれます。

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

font.weight: "Bold"

このコードは正しくパースされなくなり、以下に示すように、等価なenum値で置き換える必要があります。

font.weight: Font.Bold

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

Qt 5 では、FontLoadername プロパティは書き込み可能で、設定されるとアイテムの 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 コマンドラインツールのようなQtShader Toolsモジュールのツールによって前処理されることが期待されています。そのため、シェーダー資産は、実行時にどのグラフィックス API (Vulkan、Metal、OpenGL、Direct 3D) が使用されているかに関係なく使用できます。ShaderEffect アイテムは、結果の.qsb ファイルを参照することが期待されています。

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

ShaderEffect プロパティvertexShaderfragmentShader は、QByteArray の代わりに、QUrl のタイプを持つようになりました。 したがって、これらの動作は、Image.source などの他の類似プロパティと同じです。file またはqrc スキームでファイルを参照する既存のコードは、そのまま引き続き動作します。また、この変更により、コンポーネント(.qmlファイル)の場所からの相対パスでファイルを参照できるようになりました。そのため、file: スキームの指定は任意となりました。

Qt Quick C++ API の変更

QQuickItem

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

QQuickWidget

QQuickWidget は、シーングラフが OpenGL でレンダリングされている場合にのみ機能します。VulkanやMetalなどの他のグラフィックスAPIを使用している場合は機能しません。 に依存するアプリケーションは、main()関数内で を呼び出すことで、OpenGL の使用を強制する必要があります。QQuickWidget QQuickWindow::setGraphicsApi(QSGRendererInterface::OpenGL)

QQuick* APIへの変更

  • 独自の Vulkan、Metal、または Direct3D レンダリングコマンドのセットを統合したいアプリケーションは、QQuickWindow::beforeRendering() と afterRendering() に加えて、新しいQQuickWindow シグナルに注意する必要があります。beforeRenderingやafterRenderingに接続する既存のQt 5のパターンは、それだけでは十分でないことが多く、beforeRenderPassRecording ()やafterRenderPassRecording ()のような追加のシグナルに接続することで補完する必要があるでしょう。
  • 独自のOpenGLレンダリング・コマンドのセットを発行するために、QQuickWindow::beforeRendering ()またはafterRendering()シグナルに依存するアプリケーションは、OpenGL呼び出しの前にQQuickWindow::beginExternalCommands ()を呼び出し、OpenGL呼び出しの後に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() になりました。
  • setClearBeforeRendering() と clearBeforeRendering() はQQuickWindow から削除されました。 Qt 6 ではカラーバッファのクリアをスキップするオプションはありません。setClearBeforeRendering() の呼び出しは、Qt Quick がカラーバッファにレンダリングされたコンテンツをクリアするのを防ぐために、Qt 5 ではアンダーレイと組み合わせてしばしば必要でした。Qt 6 では、beforeRenderPassRecording() シグナルに接続することで、Qt Quick のコンテンツがクリアされた後、レンダリングされる前にシグナルが発せられます。
  • 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 grab()は削除され、代わりに ()を使用してください。initialize()関数は、もはや を取りません。アプリケーションは、 ()と ()を適切に呼び出す必要があります。マルチサンプリングが必要な場合は、新しい関数 () を呼び出してサンプル数を指定する必要があります。QQuickWindow::grabWindow QOpenGLContext QQuickRenderControl::beginFrame QQuickRenderControl::endFrame QQuickRenderControl::setSamples
  • 既存のネイティブ・グラフィック・デバイスまたはコンテキスト・オブジェクトと組み合わせてQt Quick レンダリングを実行したいアプリケーションは、QQuickRenderControlinitialize(QOpenGLContext*) 関数を提供しなくなったため、新しいQQuickWindow::setGraphicsDevice() 関数を使用する必要があります。
  • QQuickPaintedItemContext2DFramebuffer モードに設定しても効果はありません。デフォルトのImageモードに設定されているのと同じように動作します。
  • 環境変数QSG_NO_DEPTH_BUFFER は Qt 6.0 でもサポートされていますが、setDepthBufferFor2D() をQQuickGraphicsConfiguration にコールして、QQuickWindow に関連付けることで置き換えることを推奨します。

QSG* API の変更点

  • QSGMaterialShader のインターフェイスが変更されました。実装はもはやOpenGLに依存すべきではなく、今では削除されたupdateState()のような関数が currentで呼び出されることを仮定することはできません。新しい、データ指向のインターフェイスでは、updateState()は、 ()、 ()、 ()で置き換えられます。文字列として提供される GLSL シェーダーコードの代わりに、シェーダーは コマンドラインツールのような Qt モジュールのツールによって前処理されることが期待されるようになり、実行時にどのグラフィックス API (Vulkan、Metal、OpenGL、または Direct 3D) が使用されているかに関係なくシェーダー資産が使用可能であることが保証されます。QOpenGLContext updateUniformData updateSampledImage updateGraphicsPipelineState qsb Shader Tools
  • QSGEngine は削除されました。万が一、このクラスを使用するアプリケーションがある場合は、代わりにQQuickRenderControl を使用するように移植することをお勧めします。
  • QSGAbstractRenderer はパブリックではなくなりました。このクラスの使用はQSGEngineとの組み合わせでのみ意味があり、このクラスが削除されたため、QSGAbstractRendererはprivateに戻されました。
  • 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 Scene GraphおよびQt Quick Scene Graph Default Rendererのページを参照してください。

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