Skip to main content

Qt 6.11 リリース

コメント
Qt 6.11 リリース
12:27
このブログは「Qt 6.11 Released!」の抄訳です。

Qt Frameworkのバージョン6.11がリリースされました。パフォーマンスの向上に加え、グラフィックス、接続性、言語に関する新たな技術や機能がサポートされているほか、非同期C++コーディングに対する新たな手法も導入されています。ぜひ詳しくご覧ください。

リリースの概要

今回も、数多くの改善点、修正、新機能が盛り込まれています。ここでは、主な変更点を簡潔にまとめました。

詳細については、下にスクロールしてください。

謝辞とダウンロード方法については、ページの下部をご覧ください。

ハードウェアアクセラレーション2Dレンダリング

HTML Canvas 2Dコンテキストに基づく新しいモジュール「Qt Canvas Painter」により、パフォーマンスと生産性が向上します。詳細は2Dレンダリングのパフォーマンスと生産性向上:Qt Canvas Painterをご覧ください。

3D機能の改善

新しいレンダリング技術として、ライトマップベイクのオプションとなるスクリーン空間グローバルイルミネーション(SSGI)と、スクリーン空間反射(SSR)が追加されました。また、モーションベクトルを用いた時間的アンチエイリアシングアルゴリズムも改良されました。詳細は新しいリアルタイムレンダリング技術:SSGIとSSRをご覧ください。

QML内で直接、ポストプロセスエフェクト、カラーピッキング、レイヤーマスクなどのための新しいユーザー定義レンダーパスが利用可能になりました。詳細は高度なレンダーパスのカスタマイズをご覧ください。

インタラクティブなグラフ

ユーザー定義のデリゲートが各データポイントをレンダリングするカスタムグラフを実装できるようになりました。新しいQtサンプル「Wind Turbine Dashboard」が追加されたほか、折れ線グラフのスタイル設定の新しい方法や、3Dグラフでの多軸対応など、多くの改善が行われています。詳細はグラフの作成と操作の新しい方法をご覧ください。

C++における宣言型記述手法

Qt TaskTreeは、Qtにおける非同期コーディングとC++ APIの設計に、まったく新しいアプローチをもたらします。さらに、さまざまなAPIが統一されたため、あらゆる非同期タスクをこの新しいモジュールに合わせて動作させることが可能になりました。詳細は非同期コーディングへの宣言型手法:Qt TaskTreeをご覧ください。

その他の改善点

ベクターグラフィックス、コントロール、アクセシビリティの改善が行われました。詳細はUIフレームワークと2D機能の追加をご覧ください。


新しいモジュール「Qt OpenAPI」により、Webサービスへの接続がより簡単になりました。詳細はWebおよび接続機能の改善をご覧ください。

IDE内でのQMLとC++間の移動、およびC++バックエンドコードからQt Quickへデータを提供することが、より簡単になりました。詳細はQMLとC++の統合がより容易にをご覧ください。

その他にも、マルチメディア、Android、APIドキュメントなど、数多くの改善が行われています。詳細はその他の新機能をご覧ください。

 

ハイライトのビデオをご覧ください

埋め込み動画が表示されない場合は、YouTubeで発表動画を視聴できます

2Dレンダリングのパフォーマンスと生産性向上:Qt Canvas Painter

今回のリリースでは、Qt を使用した 2D グラフィックス作成のための新しいモダンなアプローチ、Qt Canvas Painter が導入されました。この新しいモジュールは 2D グラフィックスレンダリング機能を備えており、Qt の Rendering Hardware Interface (RHI) を基盤として構築されています。ハードウェアアクセラレーションにより、UI グラフィックスのパフォーマンスが大幅に向上し、ベンチマークでは以前の QPainter OpenGL バックエンドモジュールと比較して著しい速度向上が確認されています。

Qt Canvas Painter は、おなじみの HTML Canvas 2D コンテキストに準拠しており、すぐに簡単に使い始めることができ、最初から生産性を高めることができます。

パフォーマンスと生産性の向上に加え、この新しいモジュールはさまざまな高度な機能を提供します。これには、調整可能なアンチエイリアシング、ボックスグラデーションやシャドウ、グリッドパターン、カスタムシェーダーブラシやカラーエフェクトなどが含まれ、モダンで視覚的に豊かなUIや、効率的なGPU駆動の描画ワークフローをサポートします。

詳細については、この1分間のティーザー動画をご覧ください。

さらに詳しく知りたい方は、以下のブログシリーズをご覧ください。

トップクラスの3Dフレームワーク、さらなる進化 

Qtは進化を遂げ、ゲームエンジンと同等の3D機能を提供しつつ、一貫した高いパフォーマンスを実現するようになりました。つまり、Qt Quick 3Dを使用したUIは、複雑な要素やエフェクト、アニメーションがあってもスムーズに動作します。

新しいリアルタイムレンダリング技術:SSGI、SSR、およびモーションベクトル

Qt 6.10では、光と静的オブジェクトとの相互作用を扱う技術であるライトマップのベイク処理が改善されましたが、6.11リリースでは、これに代わる動的な手法が導入されました。SSGI(Screen Space Global Illumination)は、画面上の表面で光がどのように反射するかをシミュレートするレンダリング技術であり、ポストプロセス効果としてリアルタイムの変化に対応します。ただし、SSGIには一定のパフォーマンスコストが伴うため、リソースに制約のあるターゲットではライトマップベイクを、特にパフォーマンスへの要求がそれほど高くないアプリケーションにおけるリッチな3D UIではSSGIを採用することが推奨されます。

A 3D UI example scene showing SSGI vs lightmap baking in the Qt 6.11 release highlights

6.11で新たに追加されたもう1つのリアルタイムレンダリング技術が、SSR(Screen Space Reflections)です。SSGIと同様に、画面上に表示されているものを利用しますが、反射をレンダリングするために、各ピクセルを「レイマーチング」し、それに応じて反射を計算します。

さらに、Qt Quick 3D では、SceneEnvironment および ExtendedSceneEnvironment といった型を通じて、3D オブジェクトのアンチエイリアス処理を行うためのさまざまな手法をサポートしています。特に、動いているオブジェクトのギザギザ感を軽減する上で、時間的アンチエイリアシングとモーションブラーは注目すべき機能です。Qt 6.11 では、オブジェクトごとのモーションベクトルの生成機能を追加しました。これにより、計算コストと出力精度のバランスが極めて良好なものとなっています。

高度なレンダリング・パスのカスタマイズ

高度な視覚効果、パフォーマンスの最適化、または独自の技術の統合が必要で、デフォルトのレンダリング・パイプラインを超える機能を求めるユーザーのために、Qt Quick 3Dではレンダリング・パスをカスタマイズするオプションが提供されるようになりました。レイヤーとタグのための新しいAPIにより、レンダリング・パイプラインの各部分にどのアイテムを含めるかを指定したり、それらを異なるレンダリング・ターゲットに割り当てたり、個々のレンダリング・パスを制御したりすることが可能になりました。既存のマテリアルを使用したり、追加のシェーダーでマテリアルを拡張したり、マテリアルの特定の側面を上書きしたりできます。これらの新しい柔軟性はすべて、QMLから直接利用可能です。

Qt 6.11のQt Quick 3Dで何ができるか、その他の例をご覧になりたい場合は、こちらをご覧ください。

グラフの作成と操作の新しい方法

グラフに関する新しいQtサンプル「Wind Turbine Dashboard」をご紹介します。このサンプルでは、シンプルな2D表示から複雑な3Dグラフまで、データ可視化をいかに柔軟に作成・組み合わせることができるかを実演しています。また、グラフの外観、ラベル、ユーザー操作など、あらゆる面で高度なカスタマイズが可能です。

New Graphs Example in Qt 6.11: the Wind Turbine Dashboard

QtのサンプルにあるWind Turbine Dashboard をお試しください(Qt Graphsモジュールがインストールされていることを確認してください)。

この新しい例では、3Dグラフが複数の軸に対応していることがわかります。QBar3DSeriesrowAxisvalueAxiscolumnAxisプロパティ、またはQScatter3DSeriesおよびQSurface3DSeriesaxisXaxisYaxisZプロパティに対して、異なる軸インスタンスを使用してください。Qt Graphs モジュールの各要素にいくつかの新しいプロパティを追加し、グラフの描画方法をより細かく制御できるようにしました。個々の軸のテーマカラーやエリアグラフのグラデーションのオーバーライドから、折れ線グラフの線、ストローク、および結合スタイルまで、幅広く対応しています。Bar3DSeriesのラベルはより柔軟にカスタマイズおよび配置が可能になり、QDateTimeAxisはタイムゾーンを受け入れ、パンやズームが可能になりました。また、QSplineSeries::optimizedGraphsItem3D.cutoffMarginなどのプロパティにより、さらに微調整が可能になりました。

それでもまだ物足りない場合は、新しいCustomSeriesタイプを使用することで、ユーザー定義のデリゲートが各データポイントをレンダリングする、完全にカスタムなグラフを実装することができます。

非同期コーディングへの宣言型記述法:Qt TaskTree

Qt TaskTreeは、Qt 6.11でテクノロジープレビューとして提供されている新しいモジュールです。

Qt TaskTreeは、C++に宣言型記述の手法を導入することで、QtのAPI設計に全く新しい視点をもたらします。非同期ワークフローは、レシピと呼ばれる再利用可能なオブジェクトをタスクツリーに渡すことで宣言的な記述として表現され、タスクツリーはそれに応じてワークフローを自動的に管理します。これにより、ワークフローと定型コードが明確に分離され、従来のアプローチよりもコードの可読性が大幅に向上します。タスクツリーが面倒な処理を代行してくれるため、複雑なワークフローであっても、一箇所で明確かつ正確に記述することができます。

Qt TaskTree Example in Qt 6.11

さらに、Qt TaskTreeはAPIの非互換性の問題を解決し、さまざまな非同期APIを共通のインターフェースに統合することで、あらゆる非同期タスクをこのモジュールで動作するように適応させることができます。

Qt TaskTreeは、非同期コードの記述や読み取りに対する考え方を変える大きな変更点です。詳細については

その他の主な改善点

Qt 6.11 リリースにおけるその他の大きな改善点としては、UI フレームワークの機能追加、Web サービスへの接続の簡素化やその他の接続性に関する改善、そして QML と C++ の統合の容易化などが挙げられます。

UIフレームワークと2D機能の追加

LottieおよびSVGベクターアニメーションのサポート強化に向けた取り組みに対し、多くの素晴らしいフィードバックをいただきました。Qt 6.11では、その取り組みをさらに進めています。現在では、パスアニメーションやモーフィングアニメーションに加え、マットレイヤー、SVGマスク、SVGシンボルもサポートしています。また、CSSアニメーションのタイミング関数の事前定義されたサブセットに対応しており、Qt Quick VectorImageモジュール用のLottieバックエンドおよびlottietoqmlツールは、安定版となり、テクニカルプレビューの段階を脱しました。

UIフレームワークに関しては、Qt Quick Controlsに要望の多かったDoubleSpinBoxを追加し、DialogButtonBoxにおけるデフォルトボタンの動作を制御するAPIを追加しました。また、RectangularShadowエフェクトの角の半径を個別に制御できるようにしました。

Qt Widgets ユーザー向けに、QWizard に新しい StretchBanner オプションを追加する機能、新しい keyboardSearchFlags を使用して QAbstractItemView のデフォルトのキーボード検索の動作を調整する機能、および QColumnView 内のプレビュー列 の表示/非表示を制御する機能を統合しました。

Qt Quick Controls と Qt Widgets の両方で、アクセシビリティクライアントが UI 要素をナビゲートし、ロールや方向の変更について通知を受け取る方法を改善しました。

Webおよび接続機能の改善

Qt 6.11では、Webサービスとの統合に引き続き注力しました。Qt OpenAPIモジュールを使用することで、Qt NetworksのRESTful APIを利用するQt HTTPクライアントコードを簡単に生成できるようになります。このジェネレータはOpenAPI Generatorのプラグインであるため、OpenAPI YAML仕様を取り込み、高度なカスタマイズが可能で、cmakeビルドシステムと統合されています。

詳細については

Qt GRPC では、リクエストとレスポンスの流れや内容を制御するための新しい仕組みを追加しました。Qt HTTP Server モジュールにより、スケーラブルなサーバーの実装が容易になり、制限を制御するためのいくつかの改善に加え、ワーカースレッドでレスポンスを処理できるようになりました。最下位レベルでは、QNetworkRequest で現在のリクエストの TCP Keep Alive パラメータを指定できるようになり、デフォルトでは、2 分間操作がない接続は自動的に切断されるようになりました。

QMLとC++の統合がさらに容易に

QML言語サーバーは、QML型のC++定義がどこにあるかを認識するようになりました。これにより、IDEから両言語間を簡単に移動できるようになりました。C++コードではIDによってQMLオブジェクトを検索でき、QMLコンテキストの階層構造を容易に探索できるようになりました。C++で宣言されたプロパティには、誤ってプロパティが隠蔽されるのを防ぐため、明示的にvirtualやoverrideのタグを付けることができます。

Qt 6.10での導入に続き、QRangeModelにはコンパニオンクラスであるQRangeModelAdapterが追加されました。これは、QAbstractItemModelプロトコルに準拠しつつ、モデルデータを変更するためのC++ APIを提供します。各行または各アイテムが同じ QObject サブクラスによって裏付けられているデータの場合、QRangeModel は各オブジェクトのプロパティ変更通知を dataChanged() シグナルに 自動的に接続し、追加のコードを記述することなく、データ変更に関する UI の最新状態を維持できます。これにより、QAbstractItemModel API を扱う必要がなく、C++ バックエンドコードからのデータを Qt Quick(または Widget)アイテムビューで利用できるようになります。

詳細については

その他の新機能

上記では、Qt 6.11における主な新機能の一部をご紹介しました。「Qt 6.11の新機能」ドキュメントには、リアルタイム音声処理のための新しいQt Multimedia APIなど、他にも多くの情報が掲載されています。Androidプラットフォームを対象とする開発者の皆様は、Qt JennyやQtQuickViewの改良、およびQJniObjectのデフォルトの例外処理を無効にできる機能のおかげで、C++からJava/Kotlin APIを呼び出すことや、その逆の操作がより容易になりました。

独自のAPIのドキュメント作成にqdocをご利用の場合、特にモダンC++のコンセプトを使用する際に利用できる新しいコマンドが多数追加されています。モダンC++ APIのHTMLへのレンダリングが改善されたことで、Qt内のテンプレートを多用するAPIの読みやすさが向上しました。

 謝辞

Qt 6.11の実現にご協力いただいたすべての貢献者の皆様に感謝申し上げます。Qtのソースコードにパッチを提供してくださったコミュニティメンバーの完全なリストは、リリースノートの末尾に掲載されています。

特に、バグの報告やユースケースの共有、フィードバックの提供を通じて、Qtの改善にご協力いただいた皆様に深く感謝申し上げます。ベータ期間中のテクノロジープレビューモジュールや新機能に関するご意見は、大変参考になりました。最後に、今回のリリースの実現にご尽力いただいたすべての方々に、心より感謝申し上げます!

今すぐアップデート!

いつものように、新しいリリースはQtインストーラーから入手できます。また、当社のウェブサイトまたはQtアカウントページから、このリリースをダウンロードすることも可能です。

コメント

ブログを購読

Qt 6.10 を今すぐ試そう!

最新リリースはこちらからダウンロードできます。 www.qt.io/download

 Qt 6.10 がリリースされました!アプリケーション開発者やデバイス開発者向けに、多くの新機能と改善が追加されています。 

採用情報 

現在、さまざまなポジションで採用を行っています。募集職種はこちら をご覧ください。また、Instagram をフォローして #QtPeople の働き方もぜひチェックしてください。