Qt 6.7 リリース

本記事は「Qt 6.7 Released」の抄訳です。
 

Qt 6.7 がリリースされ、モダンなアプリケーションやユーザーエクスペリエンスを構築する楽しみを提供するために、大小さまざまな改良が加えられました。

新機能のいくつかがテクノロジープレビューとしてリリースされ、次のLTSリリースに向けてすべてを準備できるよう、皆様のフィードバックをお待ちしております!

以下、ハイライトをご覧ください:

(日本語キャプションあり)

Qt で C++20 の使用

C++20は、多くのコンパイラツールチェーンにとってまだオプトインおよび実験的です。現時点では、Qtをビルドまたは使用するためにC++20を要求する理由は見当たりません。ただし、ユーザーが自分自身のコードで新しい標準を好きなだけ使用できるようにしたいと考えています。C++17とC++20の間で行われたいくつかの変更は、既存のコードを調整する必要があり、Qtでも調整が必要でした。Qt 6.7では、QtをモダンなC++スタックの一部に感じさせるための適応を継続して行っています。

C++20言語への有用な追加機能の1つは、3方向比較演算子<=>(宇宙船演算子)です。この演算子を実装する際、型定義は順序付けのカテゴリを指定する必要があります。Qt 6.7では、対応するstd::*_ordering 型のC++17互換実装としてQt::{strong,weak,partial}_orderingクラスを追加しました。型の作成者向けに、Qt 6.7では関係演算子を実装するために使用できるヘルパーマクロを提供しています。これらのマクロは、C++20ビルドではoperator<=>()に展開され、C++17ビルドでは6つの演算子にフォールバックします。

C++20の標準ライブラリに加わる便利な機能の1つは、std::spanです。連続するオブジェクトの所有していない表現として、spanは構築や関数呼び出しを通過するのに安価であり、QSpan を使用することでそのタイプのC++17実装を持つようになりました。

また、関連するQt APIにstd::chronoサポートを引き続き追加しています。QtネットワークAPIの転送タイムアウトは、std::chronoタイプやリテラル(たとえば5秒の場合は5s)で指定できるようになりました。

2Dおよび3Dの視覚化をサポートするQt Graphs

Qt 6.6では、ハードウェアアクセラレーションされたレンダリングアーキテクチャの上でデータを視覚化するためのモダンなQt 6フレームワーク、Qt Graphsの初のテクノロジープレビューを導入しました。

Qt 6.7では、Qt 6.6以来すでに利用可能な3Dの視覚化に加えて、2Dの棒グラフ、折れ線グラフ、散布図のサポートを追加しています。このモジュールは、Qt Quickのアニメーションやエフェクトと統合され、テーマ設定やハンドラベースのインタラクションAPIを提供します。

2d-graphs

Qt Graphsはまだ開発中であり、このリリースでは引き続きテクノロジープレビューです。データAPIとアーキテクチャに大幅な改善を加え、メモリ割り当ての量を削減し、Qtの抽象アイテムモデルと一貫して統合してきました。Qt 6.8 LTSにテクノロジープレビューから取り外す前に、さらなるアーキテクチャとAPIの改善が期待されており、お客様のユースケースや希望についてお聞きすることを楽しみにしています。最良の方法でそれらに対応できるよう努めてまいります。

コネクティビティ、プロトコル、および分散アーキテクチャ

分散システムの開発者は、新しいREST用途のクラスであるQHttpHeadersQRestAccessManager、およびQRestReply の導入により、HTTPやREST APIをより効率的に扱うことができるようになりました。

Qt gRPCは、クライアント、サーバー、または双方向ストリーミング通信用の新しいクラスを導入し、値の変更に自動的にトリガーされるシームレスなメッセージングを実現しています。新しいInterceptor APIを使用すると、選択したgRPCメッセージにコールバック関数を追加することが可能で、たとえばキャッシュやロギングを実装することができます。また、Qt 6.7のQt Protobufでは、開発者がProtobufメッセージをJSON形式にシリアライズおよび逆シリアライズすることができ、オプションフィールドをサポートし、列挙値の大文字と小文字を保持するジェネレータの改善を活用できます。

これらの新機能により、開発者はQtを使用して堅牢でスケーラブルなアプリケーションを構築しやすくなりました。Qt gRPCとQt Protobufは、HTTP/2のサポートを完了させた際に、Qt 6.8リリースでテクノロジープレビューから正式リリースされます。

ベクターグラフィックス

導入以来、Qt SVGはSVG 1.2 Tinyプロファイルの静的な機能をサポートしてきました。しかし、このプロファイルは最近ますます関係性が薄れており、長い間、制作ツールは特定のプロファイルに従っていませんでした。Qt 6.7では、SVGアセットで一般的に使用されているSVG 1.1および2.0の静的要素を分析し、最も頻繁に遭遇した機能をサポートに追加しました、つまり <symbol><marker><pattern><mask>、およびさまざまな <filter>要素。Qt SVG 6.7では、UI開発者にとって関連性の高いSVGファイルの大部分をレンダリングできるようになりました。

ブラウザで描画されたマスク付きのSVG Qt SVGによって描画されたマスク付きのSVG

 

svg-mask

 

svg-mask

 

SVG 2.0のフルサポートが必要な場合は、Qt WebEngineモジュールが依然として最適な選択肢です。

Qt UIにSVGを事前レンダリングされたピクスマップとしてインポートするだけでなく、ベクターグラフィックスアセットを直接Qt Quickシーングラフにインポートする作業も進行中です。新しい(実験的な)svgtoqmlツールはSVGをQMLに変換し、Qt Quick Shapesモジュールでより高品質にレンダリングするための改良を行いました。Qt 6.6でテクノロジープレビューとして導入されたカーブレンダラーは、現在完全にサポートされており、preferredRendererType プロパティを使用して有効にすることができます。

フォントとアイコンの改善

Qt 6.6でのタイポグラフィックフォント機能のサポート導入後、Qt 6.7では可変フォントのサポートを追加しました。可変フォントは単一のタイプフェイスの変形を1つのフォントファイルに組み合わせ、アプリケーションが任意の"ウェイト"や"斜体"の値を選択できるようにします。フォントデザイナーが作成した可変軸によって、グリフはアニメーションされるか、異なるレイヤーが表示されることがあります。可変フォントのサポートやその他のテキストの改善については、Eskilのブログ投稿をご覧ください。

APIは現在安定しており、フォント機能や軸名をタイプセーフな方法で指定するために新しい QFont::Tag クラスを一貫して使用しています。

最新のフォントのサポート向上により、フォントを通じて提供されることが多いネイティブアイコンライブラリのサポートを追加することが可能となりました。QIcon::fromThemeの実装では、XDGアイコン名をApple、Windows、Androidプラットフォームのネイティブアイコンライブラリ内の対応するシンボルにマッピングします。今後は、フォントAPIの新しい機能を活用して、アイコンの輪郭や塗りつぶしバージョンなど、さらなるアイコン機能のサポートを追加する予定です。

variable-fonts

ハイブリッドアプリケーションのネイティブUI要素とレンダリング

デスクトップおよびモバイルプラットフォームでは、アプリケーションはしばしば異なる技術やフレームワークからのUI要素を組み合わせる必要があります。Qtは各プラットフォームのネイティブ技術と緊密に統合し、ウィンドウなどの基本的なUI要素を作成することができます。そして、長い間、Qt Widgetsアプリケーション内で他のフレームワークからのUI要素を使用することが可能でした。

Qt 6.7では、Qt Quickシーンにネイティブウィンドウを埋め込むサポートが追加されました。これにより、AppKitのMapViewやWindowsメディアプレイヤーなどのネイティブコントロールをQt Quick UI内で正確に配置してスタッキングすることができます。ウィンドウを重ねることで、Qt Quick UI要素をネイティブコンポーネントの上に重ねることも可能です。

foreign-windows

さらに、アプリケーションは、Qt QuickまたはQt Widgetsアプリケーションに、それぞれQRhiQuickItemQRhiWidgetクラスを使用して、QtがサポートするグラフィックAPIを使用したレンダリングコードを追加することができます。Vulkan、OpenGL、Direct3D、Metalは、すべてのターゲットプラットフォームで同等にサポートされているわけではないため、このようなコードは、多くの場合、完全なクロスプラットフォームではないかもしれません。しかし、それらの技術を使用するサードパーティのフレームワークを統合したり、特定のプラットフォーム用に高度に最適化されたレンダリングコードを記述したりすることは可能になります。

プラットフォームサポートの更新

毎回のマイナーリリースと同様に、サポートするプラットフォームのリストを更新し、関連するオペレーティングシステムの最新の安定版を追加しました。デスクトップとモバイルでは、Qt 6.7 は macOS 14 と iOS 17、Windows 11 23H2、Android 14 を完全にサポートしています。RedHat 9.2、Open Suse 5.15、SUSE Linux Enterprise Server 15 が最新のサポート Linux ディストリビューションです(Ubuntu は 22.04 のままです)。LLVMベースのMinGWツールチェーンを使用したWindows用のビルド済みバイナリはインストーラから入手可能で、WindowsとARM上のLinuxはどちらもテクノロジープレビューとして入手できます。

組み込みでは、Boot to Qt リファレンスイメージが Yocto 4.3 Nanbield をサポートしています。リアルタイムオペレーティングシステムに関しては、Qt 6.7 は iMX6 ハードウェア上で SR 24.03 を使用する VxWorks 7 用のソースのみのテクノロジプレビューを含み、QNX 7.1 用のビルド済みバイナリはオンラインインストーラから入手できます。

新しくなったサンプルとデモ

フレームワークの改良に加え、Qt に同梱されているサンプルやデモアプリケーションを整理し、UI やコーディングスタイルを一新しました。また、デザイナーと開発者が協力して Qt の UI、ビジュアライゼーション、バックエンド機能を組み合わせることで、どのようなことが可能になるかを紹介する新しいアプリケーションもいくつか作成しました。

Lightning Viewer のサンプルでは、Qt Location と Qt Quick Controls を使用して、Qt WebSocket 経由で受信した模擬雷データを視覚化しています。コントロールのスタイルは、すべて Figmaで作成しました。

lightningviewer-1

 

完全に書き直された StocQt のサンプルは、Qt Graphs を使用して NASDAQ-100 に基づく株式データを視覚化します。このサンプルの UI は Qt Design Studio を使って作成され、設定ダイアログから API キーが提供されると、データは Financial Modeling Prep サービスから受け取ったリアルタイムの情報を利用します。

stocqt

新しい OSM Buildings のサンプルでは、Qt Quick 3D と Qt Positioning及びQt Network を組み合わせて、OpenStreetMap サービスから受け取った建物の地図データの 3D ビューアを実装しています。

osmbuildings

 

バーチャルアシスタントは、ユーザーインターフェイスでますます人気が高まっています。新しいVirtual Assistantのサンプルでは、タイムラインアニメーションで3Dモデルに動きを与えることがいかに簡単かを示しています。

virtual-assistant

 

最後に、新しいVolumetric rendering のサンプルでは、Qt Quick 3Dで新しくサポートされた3Dテクスチャを使用して、ボリュームレイキャストを実装しています。

volumetric-rendering

Qt for Python

Qtに新機能が追加されるたびに、Python の提供もそれに適応する必要があります。ここで説明されている内容以外にも、PySideShibokenに多くの変更が加えられ、その詳細は後日の投稿で説明されます。お楽しみに!

大きな違いを生む小さなことの数々

上記は大きな新機能のリストですが、すべてのマイナーリリースと同様に、Qt 6.7 では既存のクラスやツールに多くの小さな改良が加えられています。What's New in Qt 6.7 のドキュメントに、すべての新機能の包括的なリストがあります。

謝辞

Qt 6.7 の実現に協力してくれたすべての貢献者に感謝します。リリースノートの最後に、Qt のソースコードにパッチを提供してくれたコミュニティメンバーの完全なリストがあります。また、バグを報告してくれたり、フィードバックを送ってくれたり、使用例について教えてくれたりして、Qt をより良いものにするために協力してくれたすべての人に感謝します。最後になりましたが、リリースに携わってくださったすべての方に感謝します!

いつものように、新しいリリースは Qt インストーラで入手できます。また、ダウンロードページQt Account ページ、そして前述のように Debian のリポジトリからもリリースを入手できます。


Blog Topics:

Comments