Qt 6.8 LTS リリース

本稿は「Qt 6.8 LTS Released!」の抄訳です。
 

Qt 6.8のリリースを発表いたします。新しいデスクトップ、モバイル、組み込みプラットフォームへの対応に加え、数百に及ぶ改良や新しい機能が追加され、開発体験の向上と要求の厳しいアプリケーションのニーズに応えるものとなっています。

主なハイライトを下記動画でご覧ください。

 

※日本語キャプションあります。

 

今回のリリースでは、既存機能の改善と安定化に重点を置きました。Qt 6.7以降、500以上のバグ修正とパフォーマンス向上が行われており、コードを一切変更せずとも既存のアプリケーションがよりスムーズに動作します。macOSでは、Qt Quickアプリケーションがネイティブメニューバーと統合され、Windows 11では新しいFluentスタイルを利用することでネイティブな外観を実現できます。さらに、Qt 6.8ではQuickウィンドウのリサイズがmacOS上でより迅速になり、WindowsではDirectWriteを使用したフォントデータベースへ変更により、アプリケーションの起動時間が改善されました。

テクノロジープレビューであったいくつかのモジュールが完成し、今回のリリースから正式にサポートされることとなりました。具体的には、Qt GraphsQt HTTP ServerQt GRPCが該当します。これらのモジュールは、ユーザーからのフィードバックを反映し、初期の技術プレビューから大幅な改善を遂げました。

商業ユーザー向けに、Qt 6.8は長期サポートが提供されており、このリリースからサポートとメンテナンス期間が従来の3年から5年に変更されました。さらに、欧州連合におけるサイバー・レジリエンス法(CRA)の規制に対応するため、Qtライブラリに関するソフトウェア・ビル・オブ・マテリアル(SBOM)文書をSPDX v2.3形式で提供し、ソフトウェアセキュリティの向上に必要な情報を提供しています。

新しいプラットフォーム、アーキテクチャ、デバイスに展開

Qt 6.8にアップグレードすることで、既存のモバイルアプリケーションをiOS 18またはAndroid 14を実行しているユーザーにも提供可能になります。

ARM版Windowsの開発が完全にサポートされ、新たに発売されたMicrosoft CoPilot+ PCをターゲットにすることが可能です。デスクトップアプリケーションは、macOS 15やARM上のLinuxデスクトップにも展開できます。これにより、QtのARMアーキテクチャに対するサポートが、組み込みからモバイル、デスクトップまでのすべてのデバイスカテゴリで完了しました。

新しいデバイスカテゴリとして、Apple Vision ProやMeta Quest 3 XRヘッドセット向けのアプリケーションとユーザー体験を作成することが可能になりました。デバイス制作者向けに、Raspberry Pi 5やNVIDIA AGX Orin、およびNXP、Toradex、STMの技術パートナーからの複数のSoCのサポートを追加しました。StarFive VisionFive 2を使用することで、Qt 6.8は新たに人気を集めているRISC-Vプラットフォームに基づくシングルボードコンピュータをサポートします。

Qtアプリケーションのコンパクト化と効率化

Qt 6.8のConfigureオプションを活用することで、開発者はアプリケーションの特性に応じてQtを最適化し、パフォーマンスと効率を向上させることが可能です。Qtフレームワークから不要な機能やコンポーネントを削除することで、アプリケーションは最大77%のROM使用量の削減、32%のRAM消費の削減、さらなる起動速度の向上を実現できます。

詳細についてcoffee machineサンプルでのバイナリサイズ削減に関する解説や、最適化されたQtの構築に関するドキュメントをご覧ください。

Qt Graphs:3Dデータの可視化を完全にサポート

Qt 6.8において、Qt Graphsは完全にサポートされており、開発者に対してインタラクティブかつ動的な2Dおよび3Dビジュアライゼーションを作成するための強力なツールキットを提供します。科学的なシミュレーションや金融チャート、リアルタイムデータ分析に携わる際、Qt Graphsはデータを視覚化するために必要なレンダリング機能とパフォーマンス最適化を提供します。Qt Graphs 3DではBars3Dにおける透明性のサポートが追加され、ラベルの余白やタイトルの位置、グリッドラインの描画に対する制御が強化されています。Qt Graphs 2DはQMLコンポーネントを使用したカスタムバーのレンダリング、積み上げバーおよび積み上げパーセントバーのサポート、バー上のラベルや軸上のタイトルの表示、より多くのデータマッピングAPIを提供します。

 

2Dおよび3DグラフのテーマAPIを統合し、Qt Widgetsに特化したAPIをQt Graphs Widgetsモジュールとして分離しました。これにより、純粋なQt QuickアプリケーションがQt Widgetsにリンクする必要がなくなりました。Qt Graphsが技術プレビュー中に行われた変更の詳細については、リンクのブログ記事をご覧ください。

Qt Charts  Qt Data Visualization から移行を希望するユーザーは、ドキュメントの移行ガイドを参照できます。

Qt Multimedia: カスタムデータおよびオーディオのポストプロセッシング

Qt Multimediaは、メディアリッチなアプリケーションを構築する上で重要な役割を果たしており、Qt 6.8ではさらに強化されています。QVideoFrameInputQAbstractVideoBuffer、およびQAudioBufferInputを使用することで、アプリケーションはカスタムメディアデータを録音セッションに送信し、QAudioBufferOutputを使用してデコードされたオーディオデータをポストプロセッシングのために受信することが可能です。

Linuxデスクトップ環境では、QScreenCaptureがWaylandコンポジタをサポートし、XDG Desktop Portalを介したScreenCastサービスを利用することができます。

Qt Quick: より多くのエフェクトとSVG

Qt Quickは、迅速で流動的なユーザーインターフェースを構築するための主要なモジュールとして引き続き活用されています。Qt 6.8では、特に複雑なシーンにおけるレンダリング速度を向上させるためのパフォーマンス最適化が複数行われました。Qt Quick Effect Makerでは、グローやマスクされたぼかしの技術が導入され、スプライトのアニメーション化やアイテムを円や円弧に変形させることが可能になりました。これにより、リソースを多く使うアプリケーションにおいて、より滑らかなアニメーションと優れた応答性が実現されます。

 

このリリースの重要な追加機能として、Qt Quick Vector Imageモジュールがあります。これにより、SVGファイルをQt Quickシーン内でスケーラブルベクターグラフィックス(SVG)としてシームレスに統合することが可能です。解像度に依存せず、応答性の高いUI要素を作成することを望む開発者にとって理想的な選択肢となります。デザインがさまざまなデバイスや画面サイズにおいても鮮明で一貫性のある見た目を保証します。Qt Quick Shapesモジュールでは、ShapePath要素が任意のテクスチャプロバイダアイテムを形状に適用し、任意の変換を行うことが可能になりました。

decorative-angel-zoomed-vectorimage

Qt 6.8におけるベクターグラフィックの改善については、このブログ記事で詳しく説明されています。

QQuickRenderTarget に新しい API が追加され、開発者はテクスチャ処理をより制御できるようになりました。また、Qt Quick 3D を外部エンジン、フレームワーク、API と統合しやすくなりました。

TableView では、プログラマーやエンドユーザーが列や行を移動できるようになりました。また、Image および BorderImage タイプでは、新たに設定した画像が非同期でロードされるまで、以前の画像を保持することができます。

Qt Quick Controls: デスクトップ統合の改善

Qt 6.8では、Fluent WinUI3デザインシステムの実装が、Qt Quick Controlsスタイルとして追加されました。この新しいスタイルにより、Windows 11上でネイティブなアプリケーションの外観と操作性を実現できますが、Qt Quickのプリミティブを使用して実装されており、すべてのプラットフォームで利用可能です。

macOSでは、Quick MenuBarとメニューはデフォルトでシステムのネイティブメニューバーと統合されます。コンテキストメニューやその他のポップアップも、トップレベルのポップアップウィンドウとして作成できます。これは現在、デスクトッププラットフォームにおけるQt Quickダイアログのデフォルトの動作です。アプリケーションは、新しいpopupTypeプロパティを使用して、各ポップアップごとにこれを制御できます。

新しいXRモジュール:没入型体験を実現

仮想現実(VR)、拡張現実(AR)、複合現実(MR)のアプリケーションの重要性が高まる中、Qt 6.8においてXRデバイスをサポートする新しいモジュールを導入しました。新しいQt Quick 3D Xrモジュールにより、開発者はVR及びARプラットフォーム向けの没入型体験をより簡単に構築できるようになり、Qtがターゲットデバイスに関わらずアプリケーション開発者にとってトップの選択肢であり続けることが保証されます。

xr

この新しいモジュールでは、ハンドトラッキングやコントローラ経由の空間入力のほか、空間アンカー移動機能のサポートが実装されています。これにより、Apple VisionProやMeta Quest 2、3などのOpenXRデバイスを使用している際に、Qt Quick 3Dで構築された環境とユーザーがやりとりできるようになります。

ヘッドマウントディスプレイでの最適なレンダリングパフォーマンスを実現するために、Qt Quick シーングラフ、標準の Quick アイテムおよびマテリアル、Qt Shader Tools ビルドシステム統合におけるマルチビューレンダリングのサポートを完了しました。

Qt Quick 3D:影とマテリアルの強化

Qt Quick 3D 6.8では、カスケードシャドウマップとパーセンテージクローサーフィルタリングソフトシャドウを使用することで、より良い影をレンダリングします。

テクニカルアーティストは、PrincipledMaterialの新しいプロパティを使用してフレネル(Fresnel)を調整し、頂点カラー属性に基づいてマスキングを適用することができます。カスタムマテリアルは、PrincipledMaterialと同じプロパティをサポートするようになりました。

Qt Network、Qt Network Auth、Qt GRPC、Qt HttpServer を使用したネットワーク

QNetworkAccessManagerは、ローカルソケット経由でHTTPリクエストを送信できるようになりました。また、アプリケーションは、マルチパートHTTPメッセージを簡単に作成するために、QFormDataBuilderを使用することができます。

Qt Network Authorization モジュールでは、ユーザーからの意見に基づき、多くの改良を行い、多くの問題に対処しました。さらに、新しい QOAuthUriSchemeReplyHandlerクラスにより、プライベート/カスタムまたは https URI スキームのリダイレクトを処理できるようになり、QOAuth2AuthorizationCodeFlowクラスにより Proof for Key Code Exchange (PKCE) がサポートされました。

QDnsLookup は TLS アソシエーションレコードについて学習し、TLS 経由で DNS を送信できるようになりました。

Qt GRPCQt Protobuf モジュールが完全にサポートされ、ストリーミングのサポートが追加された安定した API を持つようになりました。

全体にわたるその他の機能強化

上記の主要な追加機能に加えて、開発をさらに効率化するためにフレームワーク全体で一連の機能強化を行いました。すべての機能の包括的なリストについては、Qt 6.8 の新機能のドキュメントページをご覧ください。

Qt Core

新しいQChronoTimerstd::chronoと統合し、時間ベースの操作の精度を向上させます。ホットコードパスで、QStringQByteArrayQListは、データの初期化なしでサイズを変更できるようになりました。QHash はQStringQStringView をはじめとするいくつかの Qt 型の異種検索をサポートするようになり、QDirListingは下記コードで示す通り、ディレクトリエントリのイテレータベースの API を提供します。

using F = QDirListing::IteratorFlag;
QDirListing dirList(u"/sys"_s, QStringList{u"scaling_cur_freq"_s},
                    F::FilesOnly | F::Recursive);

for (const auto &dirEntry : dirList) {
    QFile f(dirEntry.filePath());
    if (f.open(QIODevice::ReadOnly))
        qDebug() << f.fileName() << f.readAll().trimmed().toDouble() / 1000 << "MHz";
}

Android プラットフォームを対象とする開発者は、QtJniTypes名前空間を使用して Java 型を JNI シグネチャで宣言し、QJniObject を介して JNIと連携する際にコンパイル時のシグネチャ生成に依存することができます。QJniArray 型を使用すると、C++コードからJava配列を簡単に扱うことができます。

Q_DECLARE_JNI_CLASS(TimeZone, "java/util/TimeZone");
using namespace QtJniTypes;

const QJniArray availableIDs = TimeZone::callStaticMethod<String[]>("getAvailableIDs");
for (const auto &availableID : availableIDs) {
    // ~~~
}

また、C++20 の宇宙船演算子 <=>()のサポートを Qt の値型に追加し続け、QPointFQMarginsFなどの浮動小数点ジオメトリ型は、ファジー比較とヌルチェックをサポートするようになりました。

Qt GUI

Qt 6.8 で開発されたアプリケーションは、Dark または Light の外観でシステム設定を上書きするために、明示的に配色を要求できるようになりました。

 

また、プラットフォーム間で一貫したアプリケーションの動作を提供するために、アプリケーションはコンテキストメニューのトリガーオーバーライドすることができます。

色空間のサポートをいくつか追加し、フォントのマージとスタイリング戦略を細かく制御するための API を追加しました。

アクセシビリティ・フレームワークは、属性の通知をサポートし、アプリケーションが、支援技術によってピックアップされるアナウンスメント・イベントを発生させることができるようになりました。

Qt SQL

Qt SQL モジュールのユーザーが数値精度ポリシー指定できるようになり、QSqlDatabase がデータベース接続のスレッド親和性を変更できるようになりました。PostgreSQL と MySQL/MariaDB ドライバが、サーバがクライアントと異なるタイムゾーンにある場合の日付と時刻のデータを正しく処理するようになりました。

Qt Test

テスト作成者は、失敗したテストやスキップしたテストに例外をスローさせることができるようになり、 サブルーチンを使用するテストを書きやすくなりました。timeout マクロがstd::chrono 即値を受け付けるようになり、より読みやすいテストコードになりました。

Qt WebEngine

新しいQWebEngineFrameクラスは、特定のフレーム上での印刷や JavaScript の実行など、フレーム固有の API を追加します。QWebEngineClientHintsにより、アプリケーションはブラウザの識別をより制御できるようになり、QWebEnginePermissionにより、新規および既存の Web サイトのパーミッションを簡単に管理できるようになります。

Qt Widgets

高DPIディスプレイ用のレンダリングコードにいくつかの改良を加え、ウィジェットベースのアプリケーションがすべての画面タイプで鮮明に見えるようにしました。

ツール

Clangとのインタフェースを持つQtのドキュメントジェネレーターQDocは、最小Clang 17が必要になりました。CベースのAPIからC++ベースのAPIに移行しました。これにより、QDocで新しいC++言語機能のサポートを実装する能力が向上しました。加えて、QDocには様々な新しいコマンドが追加されました。詳細はリリースノートをご覧ください。

QML Language Serverでは、セマンティック・シンタックス・ハイライトが利用できるようになり、JavaScript言語のサポートが改善され、Quickタイプのスニペットを生成したり、ドキュメンテーションのヒントを与えることができるようになりました。

アップグレードしてください!

これらの強力な新機能とパフォーマンスの改善により、Qt 6.8 は開発者がレスポンシブで、視覚的に魅力的で、メディアリッチなアプリケーションを様々なプラットフォームで構築できるようにします。Qt 6.8 の実現にご協力いただいたすべての貢献者に感謝します。Qt ソースコードにパッチを提供してくれたコミュニティメンバーのリストは、リリースノートの最後にあります。バグを報告してくれたり、フィードバックやコントリビューションを送ってくれたり、使用例を教えてくれたりして、Qt をより良いものにするために協力してくれた皆様に、特別な感謝💚を贈ります。そして最後になりましたが、リリースの公開に関わった全員に感謝します!

皆様が Qt の最新バージョンをどのように活用して次世代のアプリを開発されるのか、今から楽しみでなりません。今すぐ Qt 6.8 にアップグレードして、皆様のプロジェクトを次のレベルに引き上げましょう!


Blog Topics:

Comments