Qtブログ(日本語)

Qt 6.5 LTS がリリースされました!

作成者: Qt Group 日本オフィス|Apr 20, 2023 3:38:32 AM

本稿は「Qt 6.5 LTS released!」の抄訳です。

本日、Qt 6.5をリリースしました!Qt 6 シリーズで 6 番目となる今回のリリースでは、UI とグラフィックスの開発者のためのものから、アプリケーションのバックエンドに及ぶものまで、多くの新機能が追加されました。また Qt 6.5 では、多くの修正と一般的な改善が行われています。 Qt 6.5 は商用ライセンスにおいて長期サポートリリースという位置づけのリリースとなります。

まずは、Qt 6 のアプリケーションが実質的に何もしなくても手に入れることができるハイライトから見ていきましょう。

テーマとスタイリングの改善

Qt 6.5では、アプリケーションは Windows のダークモードを簡単にサポートすることができます。Windows 向けアプリケーションでは、ダークテーマをサポートすることは、アプリケーション開発者が明示的に決定しなければならないことでした。ウィンドウの背景が明るいことを期待しているアプリケーションがダークモードに切り替えられると、ユーザーインターフェイスの大半が壊れる可能性があります。しかし、Qtアプリケーションは  Fusion スタイルのようにパレットを明示的に上書きしないスタイルを使用しておけば、ユーザーが選択したカラースキームが自動的に尊重され、ダークモードにおいて、ダークシステムパレットが使用されます。また、Qtはタイトルバーとウィンドウフレームを全体の外観と同期するように設定します。

さらに、システムで行われたテーマの変更に反応して処理を行わせるともできます。これは QStyleHints::colorScheme プロパティの変更通知を処理することで実現できます。

Qt Quick Controlsでは、iOS スタイルを完全に実装し、またネイティブの iOS にないコントロールも多数実装しました。Android をターゲットとしたアプリケーションでは、Material スタイルを Material 3 デザインシステムに更新しました。Material スタイルを使用しているアプリケーションは、自動的にリフレッシュされた最新の外観を得ることができます。また、TextField や TextArea の containerStyle や、ボタン、ポップアップ、引き出し(drawer) の  roundedScale など、開発者が UI の視覚的な特徴を変更できるようにするための、API がいくつか追加されました。

また、macOS では、QMessageBox や QErrorMessage を使用するアプリケーションは、モダンな中央揃えの UI デザインでネイティブダイアログを表示します。

デバイスからウェブまで、プラットフォームの改善

Qt 6.5 では、Android 12 のサポートを追加する一方で、Android の古いバージョンでも期待通りに動作することを確認しています。Android プラットフォームの大幅な変更にもかかわらず、Qt アプリケーションの単一ビルドは、8 から 12 までの Android バージョンを搭載したデバイスに変更なくデプロイすることができます。

デバイス開発者向けである Boot2Qt ソフトウェアスタックは Yocto 4.1 (Langdale) リリースにアップグレードされ、多くの産業分野の組み込みハードウェア向けのアプリケーション開発にアクセスできるようにしました。Linuxデスクトップでは、商用 Qt 6 の Debian 11 パッケージaptで提供される予定であり、これにより Debian ベースの Linux ディストリビューションに商用の Qt アプリケーションを展開することが容易になります。

Qt 6.5 for WebAssembly は、Qt 6.4 の初期サポートリリースに続き、ビデオレンダリングのサポートとウィジェットのアクセシビリティを追加しました。Qt WebEngine は Chromium 108 にアップデートされ、さらに Chromium 110 のセキュリティパッチも含まれています。また、X11 と Wayland の両方で、Vulkan をグラフィックバックエンドとした Linux 上でのハードウェアアクセラレーションによるビデオレンダリングをサポートするようになりました。

2D、3D 両方に対応する美しく高性能なエフェクト

新しい Qt Quick Effects モジュールは、Qt Quick UI の開発者に、すぐに使えるグラフィックエフェクト群を提供します。これらはパフォーマンスのペナルティを負うことなく、組み合わせて1 つのエフェクトとして利用することができます。インタラクティブな操作が可能な Qt Quick Effect Maker ツールを使用すると、複数のエフェクトを組み合わされた、複雑なカスタムエフェクトを簡単に構築することができます。これらの技術は、Qt 5 の Qt Graphical Effects モジュールを置き換えるもので、より使いやすく、優れたパフォーマンスを持ち、拡張と柔軟性を兼ね備えたソリューションです。

 

Qt Quick 3Dは、3Dモデルの詳細度を自動的および、明示的に調整する方法を手に入れました。これによりカメラから遠く離れたオブジェクトのために簡略化したメッシュを生成して使用させるようにすることができます。SceneEnvironment は新たに霧の効果もサポートするようになったので、遠くのオブジェクトをフェードアウトさせることも可能です。より複雑なポストプロセッシングでのエフェクトの適用のために ExtendedSceneEnvironment は、被写界深度、グロー、レンズフレアなどのエフェクトを、単一の高性能なポストプロセッシングエフェクトとして統合することを可能にし、単一のレンダーパスとして処理することを可能にします。

Qt everywhere - どこでもつながる

Web サービスとの通信や機器間のデータ交換は、Qt Network の低レベルクラスと JSON や CBOR の高レベルなシリアライゼーション機能を統合することで、従来より可能でした。

新しい Qt GRPC Qt モジュールにより、gRPC Protocol Buffer の技術を Qt で統合するためのフレームワークが追加されました。Qt GRPC は gRPC サービスとの通信を可能にし、Qt Protobuf は Qt ベースのクラスをシリアライズするためのインフラストラクチャを提供します。これらのモジュールにより、開発者は protobuf 仕様(.proto)ファイルでデータやメッセージを定義することができます。 Protobuf の標準ツールは Qt のビルドシステムに統合され、Qt アプリケーションのビルドプロセスを通してアプリケーションがサービスエンドポイントと通信するための C++ 型を生成させることができるようになりました。

Qt Networkでは、HTTP 1 接続を設定する機能を導入し、Qt Serial Bus モジュールに多数の CAN バスサポートクラスを追加し、CANバスメッセージのエンコードとデコード、フレームの処理、DBC ファイルのパースなどをサポートしました。

gRPC、protobuf、CANバスの追加は、すべてQt 6.5では技術プレビュー版としての提供です。皆様のご意見をお待ちしております!

Qt Locationがテクノロジープレビューとして復活

Qt Location モジュールは、Qt 6.5 でテクノロジープレビューとして復活しました。数ヶ月前に別のブログ記事で紹介したように、Qt 6 版の Qt Location は回り道が少なくなっています。アイテムのレンダリングは Qt Quick Shapes を介して実装され、Qt 6 の QML 型システムの改良のおかげで、多くのラッパークラスを削除することが出来ました。Qt Location for Qt 6 の初期リリースでは、Open Street Maps のバックエンドのみをサポートしています。共通のAPIで利用できる機能の一部が削除され、単一のバックエンドのためにのみ実装されています。API変更のリストについては、移植ガイドを参照してください。

 Qt Quick Map コンポーネントは2つのタイプに分けられました。Map タイプは地図を表示する役割を果たしますが、インタラクティブな機能は提供しません。新しい MapView タイプは MapGestureArea を置き換え、Qt Quick 入力ハンドラを通してピンチ・ズームやパンなどの典型的なインタラクション機能を実装しています。

モジュール自体は技術プレビュー中ですが、GeoJSON のサポートはモジュールの他の部分と同等で、もはや実験的ではありません。

既存モジュールへの新機能の追加

Qt 6.5 では、Qt 6.4 とその以前の Qt 6 リリースから多くの新機能を追加しており、このブログではそれらの改善点に焦点を当てています。各モジュールの詳細を確認する前に、まだ Qt 5.15 を使っている人は、この機会にまずは Qt 5.15 との全体の機能比較ページも参照してください。

Qt Core

多くのプラットフォームでは、アプリケーションが特定のサービスにアクセスする際に、ユーザーからの明示的な許可を必要とします。Qt の新しい permission APIs により、アプリケーションはそのような同意を必要とする機能のパーミッションを確認し、ユーザー許可を要求することができるようになりました。この最初のリリースでは、デバイスの位置情報、Bluetooth、カメラ、マイク機能、およびユーザーのカレンダーと連絡先データへのアクセスに許可を求めるタイプが提供されています。

Qt GUI

ネイティブのクリップボードを介してプラットフォーム固有のデータフォーマットを交換する必要があるアプリケーションは、QWindowsMimeConverter QUtiMimeConverter を実装して Windows や macOS 固有のフォーマットをサポートできるようになりました。Qt 5 で QWindowsMime QMacMime を実装している場合、それらは新しい API にほぼそのまま変換することができ、さらにコンバータを Qt に登録するために必要であった定型的なコードはほとんどの場合不要になりました。

QGuiApplication の新しい setBadgeNumber API は、ドックやタスクバーにある未読メッセージなどのアクション可能なアイテムの数を、アプリケーションで簡単にユーザーに知らせることができるようにしました。

また、Vulkan サポートは更新され最新のインフラストラクチャを使用するようになりました。チェック可能なリストアイテムはマークダウンとHTMLサポートを追加し、QTextLayout のグリフの処理は文字列インデックスへのアクセスを提供できるようになりました。

Qt Multimedia

FFmpeg メディアバックエンドは、macOS、Windows、Android、デスクトップ Linux のデフォルトとなり、組み込みシステムでは、GStreamer が引き続きデフォルトですが、FFmpeg を明示的に有効にすることができます。このバックエンドにより、ほぼすべてのプラットフォームで同じ機能を一貫して利用できるようになりました。Qt Spatial Audio モジュールは、Qt 6.4 でテクノロジープレビューとして導入され、6.5 で完全にサポートになりました。

FFmpeg バックエンドが使用されている限り、Qt アプリケーションは新しい QScreenCapture クラスを使用して画面をキャプチャできるようになりました。画面録画からのビデオは、QMediaRecorderQVideoWidgetなどのさらなる処理のために、QMediaCaptureSession を通して指示することができます。

Qt QML と Qt Quick Compiler

Qt Quick Compiler の1つのツールである QMLタイプコンパイラ qmltcは、翻訳バインディング、インラインコンポーネント、シングルトン、シグナルハンドラを含む、より多くのQMLコンストラクトをサポートするようになりました。qmlcachegen および qmlsc に実装されている QML スクリプトコンパイラは、console による出力、let および constarg による文字列構築など、より多くの JavaScript 構成要素を扱うことができるようになりました。これらの改良は、Qt 6.5 に含まれるデュアルライセンス版の Qt Quick Compiler と、商用限定の Qt Quick Compiler Extensions アドオンの両方のエディションで利用可能です。これらの結果、QML と JavaScript から、より多くの、より優れたC++コードが生成されるようになりました。

Qt 6.5 の QML モジュールの改良により、モジュール URI と型名による QML 要素の作成がよりシンプルになりました。シーケンス型のサポートが標準化・拡張され、map()reduce()forEach() といったメソッドがサポートされています。適切なコンストラクタを持つ値型や、構造化型として登録された値型は、QMLから直接インスタンス化することができます。これにより、シングルトン C++ 型におけるコンストラクタ・ヘルパー関数の必要性がなくなりました。

Qt Quick と Quick Controls

TableView は、セルのインプレース編集、行や列のサイズ変更、複数選択などのインタラクティブな機能がサポートできるようになりました。TreeView のデリゲートもインプレース編集をサポートし、Qt Quick の入力ハンドラにはいくつかの新しいプロパティが追加されました。

Qt Widgets

QOpenGLWidgetは、基盤となるシステムがサポートしている環境において、ステレオスコピックレンダリングをサポートするようになりました。

そして、QKeySequenceEditにいくつかの小さな追加を行いました。キーシーケンスの長さを制限したり、エンドユーザーが1つまたは複数のキーの組み合わせでシーケンスの記録を終了できるように設定できるようになりました。

その他、Qt 全体の改善

上記に加えて、時間指定を QTimeZone に折り込むことで QDateTime QDate のAPIを簡略化しました。通知シグナルを持つプロパティを扱いやすくする QBindable、またアニメーションはBoundaryRule を使うことでアプリケーションからより制御できるようにしました。位置情報を扱うアプリケーションは、新しい SatelliteSource 型を QML から直接使用することができます。

安定性

Qt 6.5は Qt 6 の2番目のLTSリリースであり、Qt 6.2 LTS リリース以降の過去18ヶ月間に、多くの新機能を追加しました。その過程で、JIRA バグトラッカーによると、私たちは約3500件のチケットを修正しました!また、時間とフィードバックを活用して、新機能の安定性を向上させました。Qt 6.4でテクノロジープレビューとして導入された Qt Quick 3D Physics モジュールは成熟し、完全にサポートされるようになりました。

すべての貢献者に大きな感謝を

Qt 6.5を実現するのに貢献してくれたすべての方々に感謝したいと思います。Qtソースコードに貢献した286人の全リストは、リリースノートの最後に掲載されています。また、バグの報告やフィードバックの提供、使用例の共有などでQtをより良くしてくれたすべての方々にも感謝しています。そして最後に、CIやコードレビューシステムを運用し続けてくれている方々にも感謝したいと思います。

いつも通り、新しいリリースはQtインストーラーから利用可能です。また、ダウンロードページ Qt アカウントページ からも入手できます