本稿は「Qt 6.2 LTS Released」の抄訳です。ついにQt 6.2がリリースされました。Qt 6.2は、Qtの新たなメジャーバージョンに向けた取り組みの結晶ともいえるリリースです。Qt 6に対して行ってきたアーキテクチャのアップグレードが反映されているほか、Qt 5.15のほぼすべてのアドオンモジュールが含まれています。
Qt 6.2はQt 6シリーズにおける最初のQt商用ライセンスユーザー向け長期サポートの対象となるリリースです。
The Qt CompanyではQt 6への移行に際して、Qtの優位性を今後長期にわたって維持できるように、Qtの中核部分に注力して、アーキテクチャの変更を行うことを重視しました。そのため、以前はサポートされていたアドオンがQt 6.0のリリースでは引き継がれていませんでした。したがってQt 6.0は、Qt 5.15に比べて進化していながら、Qt 5.15にあった一部の機能がないという側面もあったのです。Qt 6.2ではそのギャップが埋まりました。Qt 5.15でよく使用されていた機能が復活し、Qt 6で追加された新機能も含まれています。
Qt 6.2のリリースにより、ほとんどのユーザーがQt 5からQt 6にコードを移行できるようになります。それを可能にしたのが、Qt 6.2 LTSをベースにした、Qt Design Studio 2.2とまもなくリリースされるQt Creator 6ベータです。
Qt 6.2では、欠けていた機能を補っただけでなく、安定性とパフォーマンス、そして開発者にとっての使いやすさの向上を図りました。
Qt 6.2の新機能を詳しく見ていく前に、まずQt 6における主な変更点を確認しておきましょう。
Qt 6では広範なアーキテクチャ変更を行いました。これを基盤としてQt 6.2以降のリリースに続くことになります。次のような変更を実施しました。
こうした多くの変更があっても、既存のコードベースはQt 6に容易に移植できます。これについては、この記事の終わりのほうで説明します。
次に、Qt 6.2の新機能について詳しく見てみましょう。
Qt 6.2の開発時に特に力を入れたのが、Qt 6.0で省かれたモジュールや機能を復活させることでした。ごくわずかな例外を除いて、Qt 5.15でサポートされていたモジュールは、ほとんどすべてQt 6.2でもサポートされています。
Qt 6.2では、すでにQt 6.1でサポートされていたもの以外に、次に示すモジュールが追加されました。
これらのモジュールのAPIはほとんどがQt 5との下位互換性があるため、ユーザーコードをわずかに調整するだけでQt 6に移植することができます。
Qt 6.2でサポートされているモジュールの一覧については、The Qt Companyのこちらのドキュメントをご覧ください。
Qt 6.2はQt 5から多数のモジュールを引き継いでいますが、次に示すような各種の新機能が追加されています。
Qt Quick 3Dに高度な新機能が追加され、インスタンス化レンダリング対応になりました。それにより、多数の同じオブジェクトをさまざまに変形してレンダリングできます。また、シーンに3Dパーティクル効果を加える新しいAPIも追加されました。
また入力処理が改善され、3Dシーンに埋め込まれている2Dアイテムに対する、Qt Quick入力イベントを正確に作成できるようになりました。さらに、シーン内の任意のポイントからレイベースのピッキングを行うための新しいAPIも追加されています。
Qt 6.2ではQML用ツールが大幅に改善されています。QMLモジュール作成用のCMake APIを使用すれば、独自のQMLプラグインを非常に簡単に作成できます。
QMLリンター(qmllint)は、QMLのソースコードをチェックすることで、ベストプラクティスを把握し、コーディングやパフォーマンスに関する潜在的な問題を見つけ出すことができるツールです。メンテナンスが容易なQMLを記述するうえで役立ちます。QMLリンターには大幅な変更が加えられており、設定ファイルを通じてコマンドラインレベルでも、またQMLファイル自体の個々のブロックでも、詳細な設定が可能になっています。さらにJSON出力を生成できるため、他のツールや自動システムとの統合も容易になりました。
QMLフォーマッター(qmlformat)ではQML domライブラリを使用するようになり、出力の質も大きく向上しています。
詳細についてはこちらのブログ記事をご覧ください。
Qt MultimediaはQt 6で重要な変更が加えられています。Qt 5におけるQt MultimediaはAPIとして、十分に満足のいくものではありませんでした。そのため原点に戻り、下位互換性は特に重視せずに、APIとアーキテクチャの観点からモジュールに対して広範な変更を行いました。
とはいえ、Qt 5からQt 6へのQt Multimediaの移植を複雑にするわけにはいきません。
Qt 6のQt Multimediaでは、ユーザーから強いリクエストがありながらQt 5では十分にサポートできなかった機能が追加されています。たとえば再生時の字幕や言語選択の設定、メディアキャプチャ用の詳細設定などです。
内部アーキテクチャがクリーンアップされ、Qt 5のようにパブリックAPIを通じて公開されなくなりました。そのためバグ修正が迅速化され、将来的に新機能の追加が非常に容易になりました。詳細については、Qt 6でのQt Multimediaに関するブログ記事をご覧ください。
ただしこうした広範な変更により、Qt Multimediaには未完成な部分が残っており、相当数のバグが実装に含まれている可能性があります。しかし、マルチメディア機能は不可欠であることから、Qt 6.2ではQt Multimediaを完全にサポートします。
そのため、大きな問題を修正する目的で必要であれば、パッチレベルのリリースに関する通常のコミットポリシーから外れて、小規模のAPI追加を実施する場合があります。
また報告されたバグについては、今後のパッチレベルのリリースで可能な限りすみやかに修正していきます。
その他ほとんどすべてのモジュールについて、小規模なAPIの追加と改善を行いました。
ユーザーが新しいプロパティシステムを活用できるように、これまで多数のAPIを移植してきました。それによってC++のプロパティバインディングが可能になっていますが、この取り組みは完全な形になるまで今後のリリースでも継続していきます。
またこれに加えて、APIに関する多くの問題点や欠けていた機能についても広範に修正しています。次にいくつか例を挙げます。
詳細については、The Qt Companyのwikiにある新機能のページをご覧ください。
Qt CreatorとQt Design Studioについても、Qt 6.2を最大限サポートするための強化がなされています。Qt Creator 5には、Qt 6.2への移行に必要な機能が揃っています。
Qt Design Studioの最新バージョンも今日リリースされました。Qt Design Studio 2.2はQt 6.2をベースにしており、Qt QuickとQt Quick 3Dに基づくユーザーインターフェースを1つのグラフィカルなツールで実現できる製品です。そしてデスクトップやモバイル、あるいは組み込みデバイスなど、目的のハードウェアでインターフェースを簡単にテストできます。詳細については、Qt Design Studio 2.2に関するブログ記事をご覧ください。
Qt 6.2については、現在サポートしているプラットフォームへの適合性を向上させるため、さまざまな措置が行いました。それは、HighDPIレンダリングへの対応の強化、iOSへのNFCバックエンドの追加など、デスクトップとモバイルの両方にわたっています。
それに加えて、Qt 6.2はサポート対象のプラットフォームの範囲を大幅に拡張しています。
Qt 6.2はmacOS on Apple Siliconに完全に対応しています。Qtではユニバーサルバイナリを簡単に作成できるため、IntelとApple Siliconのどちらのチップを使用してもmacOS向けの開発ができるようになりました。もちろんこのバージョンは、The Qt CompanyのCIシステムでも完全にテスト済みです。QtアプリケーションはこれまでもRosettaレイヤを介してApple Silicon上で実行できましたが、Qt 6.2はApple Silicon上で完全にネイティブに実行できるようになっています。
Qt 6.2では、リアルタイムオペレーティングシステムのINTEGRITYとQNXのサポートも復活しました。このサポートは、C++17ツールチェーンと最新バージョンのオペレーティングシステムを必要とします。QNXの最小要件はバージョン7.1であり、INTEGRITYではバージョン19.0.13をサポートしています。
webOSへのQtのコミットメントを強化するために、Qt 6.2に対するwebOS検証も完了しています。
Windows 11のサポートに向けた取り組みも進んでおり、6.2のパッチレベルのリリースの時点で完全なサポートが可能になる見込みです。Windows on ARM HWはQt 6.2のTechnology Previewとしても利用可能です。
さらに、WebAssemblyのサポートを改善するための措置も進められました。WebAssemblyはQt 6.2のTechnology Previewとしてサポートされます。
Qt 6.2LTSのリリースと同時に、はQt for Pythonもリリースしていますのでぜひお試しください。
Qt 6の開発中には、Qt 5とのソースの互換性を確保することが重要な課題になっていました。しかし必要なアーキテクチャ変更のため、またはパフォーマンスの大幅な向上のため、この互換性をある程度犠牲にした箇所もありました。
Qt 5からQt 6への移植は、ほとんどの部分で簡単に行うことができます。Qt 6移植ガイドには、必要な手順と詳細情報が記載されています。またThe Qt Companyのパートナー企業やQtのコンサルタントも、移植に関するサポートを提供しています。
Qt 6への典型的な移植手順は次のようになります。
これにより、アプリケーションをQt 6で実行してすべての新機能を利用できるようになります。たとえばアプリケーションでQMLを使用している場合は、qmllintツールを実行し、警告に従って修正を行います。
以上に関連して、QMLとQt 6に関するオンラインブックの新しい0.9バージョンも紹介しておきます。これはQMLを導入するためにも、詳細を学ぶためにも、最適な資料です。メインの著者であるJohan Thelin氏、Jürgen Ryanell氏、Cyril Lorquet氏、そしてコミュニティのメンバーにも感謝します。これはThe Qt Companyが後援したプロジェクトであり、今後も更新が続けられる予定です。ぜひご覧いただき、プロジェクトへのご支援やご意見をいただければと思います。
Qt 6.2のダウンロードリンクに行く前に、Qt 6.2のリリースノートをご覧ください。このリリースノートでも、バグ修正の一覧を含め、Qt 6.1以降の変更点について詳しく説明しています。
リリースノートには、Qt 6.2にパッチで貢献してくださった方々の一覧も記載されています。人数が多いためここで紹介することはできませんが、Qt 6.2の実現を後押ししていただいたことに心から御礼申し上げます。
すでにQtをインストールしている場合、Qt 6.2はオンラインインストーラーで入手するのが最も簡単です。それ以外の場合は、ご自分のQtアカウントから、またはThe Qt CompanyのWebページからダウンロードしてください。
是非Qt 6.2の機能を存分にご活用ください!またお気づきの点やバグなどがありましたら、お知らせいただければと思います。Qt 6.2をさらに改善するため、今後のパッチに反映させます。
これからも最新の動きを随時お知らせしていきます。Qt 6特設Webページにご注目ください。
また、今度Tuukka Turunenと私でAMA(Ask Me Anything: なんでも質問会)ウェビナーを開催し、そこで新しいリリースに関するご質問もお受けします。ウェビナーポータルから無料で登録できます。ご質問はあらかじめフォームに記入して送信してください。このウェビナーは時間帯を変えて2回行いますので、ご都合のよいほうにご参加ください。両方にご参加いただくこともできます。
また、もうすぐQt World Summit 2021も開催されますので、そちらにもぜひご参加ください。The Qt CompanyがQt 6に関する情報を提供するほか、ユーザーの方やQtエコシステムのメンバーからも発表いただく予定です。このオンラインイベントは、Qt World SummitのWebサイトから無料で登録できます。
お読みいただきありがとうございました。新しいQt 6.2 LTSを存分に活用してくださることを願っています!