Qtブログ(日本語)

Qt 6.2 LTSをリリースしました!

作成者: Qt Group 日本オフィス|Oct 6, 2021 2:41:50 AM

本稿は「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では広範なアーキテクチャ変更を行いました。これを基盤としてQt 6.2以降のリリースに続くことになります。次のような変更を実施しました。

  • C++17の活用:Qt 6の開発では、最新のC++標準を基盤にしたいと考えました。C++17が最新バージョンでしたが、Qt 6では現在、C++17互換コンパイラを使用しています。それにより、コードベースのクリーンアップと改善の両方が可能になり、最新のAPIをユーザーに提供できるようになりました。
  • 低水準のコンテナクラスの改善:大きなデータセットとパフォーマンスの処理について改善を行いました。
  • 次世代QML:QML言語を更新し、将来に向けて安全性を高め、使いやすくする取り組みを始めています。Qt 6.0~6.2が基礎になりましたが、この取り組みはQt 6シリーズ全体にわたって継続されます。
  • C++にプロパティバインディングを導入:プロパティバインディングはQMLの有効性を高めたコンセプトの1つです。Qt 6では、プロパティバインディングをC++で使用できるようにしています。
  • 新しいグラフィックスアーキテクチャ:Qt 6では、基盤とするオペレーティングシステムのAPIとの統合を処理する、まったく新しいアーキテクチャを確立しました。新しいRendering Hardware Interface(RHI)により、Qt 6では各システムにデフォルトで搭載されている最良のグラフィックスAPIを使用して、特にWindows、macOS、iOSなどのデスクトップ/モバイルオペレーティングシステムでの互換性を大幅に向上させています。
  • Qt Quick用の2Dと3Dの統合:Qt Quickはこれまで、アニメーション化された滑らかな2Dユーザーインターフェースを構築するためのフレームワークとして使用されてきました。Qt 6では、QMLベースのアプリケーションへの3Dコンテンツの統合も簡単に行えるようになっています。緊密な統合によって、あらゆるレベルで2Dと3Dのコンテンツを融合させながら、システムのパフォーマンスを最大限に高めることができます。
  • CMakeビルドシステム:Qt 6では、qmakeからcmakeにビルドシステムを切り替えました。cmakeは、C++ベースのアプリではすでに標準のビルドシステムになっています。Qt 6では今後もqmakeがサポートされますが、すでにcmakeを導入したユーザーは、パフォーマンスが大幅に向上したと報告しています。

こうした多くの変更があっても、既存のコードベースは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 6.2はQt 5から多数のモジュールを引き継いでいますが、次に示すような各種の新機能が追加されています。

Qt Quick 3D

Qt Quick 3Dに高度な新機能が追加され、インスタンス化レンダリング対応になりました。それにより、多数の同じオブジェクトをさまざまに変形してレンダリングできます。また、シーンに3Dパーティクル効果を加える新しいAPIも追加されました。


また入力処理が改善され、3Dシーンに埋め込まれている2Dアイテムに対する、Qt Quick入力イベントを正確に作成できるようになりました。さらに、シーン内の任意のポイントからレイベースのピッキングを行うための新しいAPIも追加されています。

QML用ツール

Qt 6.2ではQML用ツールが大幅に改善されています。QMLモジュール作成用のCMake APIを使用すれば、独自のQMLプラグインを非常に簡単に作成できます。

QMLリンター(qmllint)は、QMLのソースコードをチェックすることで、ベストプラクティスを把握し、コーディングやパフォーマンスに関する潜在的な問題を見つけ出すことができるツールです。メンテナンスが容易なQMLを記述するうえで役立ちます。QMLリンターには大幅な変更が加えられており、設定ファイルを通じてコマンドラインレベルでも、またQMLファイル自体の個々のブロックでも、詳細な設定が可能になっています。さらにJSON出力を生成できるため、他のツールや自動システムとの統合も容易になりました。

QMLフォーマッター(qmlformat)ではQML domライブラリを使用するようになり、出力の質も大きく向上しています。

詳細についてはこちらのブログ記事をご覧ください。

Qt Multimedia

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に関する多くの問題点や欠けていた機能についても広範に修正しています。次にいくつか例を挙げます。

  • 利便性とカスタマイズ性の向上を目的に、Qt Chartsに新しいAPIが追加されました。
  • QImageに浮動小数点の画像フォーマットを追加しました。
  • 「QByteArray::number()」が、10以外の基数について負の値を正しく処理できるようにしました。
  • QLockFileに「std::chrono」を取るオーバーロードが加わりました。
  • Qt Networkで、実行時に共存できる複数のSSLバックエンドがサポートされるようになりました。

詳細については、The Qt Companyのwikiにある新機能のページをご覧ください。

Qt CreatorとQt Design Studio

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 5からの移植

Qt 6の開発中には、Qt 5とのソースの互換性を確保することが重要な課題になっていました。しかし必要なアーキテクチャ変更のため、またはパフォーマンスの大幅な向上のため、この互換性をある程度犠牲にした箇所もありました。

Qt 5からQt 6への移植は、ほとんどの部分で簡単に行うことができます。Qt 6移植ガイドには、必要な手順と詳細情報が記載されています。またThe Qt Companyのパートナー企業Qtのコンサルタントも、移植に関するサポートを提供しています。

Qt 6への典型的な移植手順は次のようになります。

  • サポートされているバージョンのコンパイラとプラットフォームを使用していることを確認します。
  • 最初にQt 5.15を使用してQt 6モードでコンパイルします(QT_DISABLE_DEPRECATED_BEFOREマクロを使用)。
  • 次にQt 6.xを使用してコンパイルします。必要に応じて移植フェーズで互換モジュールを使用します。

これにより、アプリケーションを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を存分に活用してくださることを願っています!