今回のリリースは、Qt 6.10 で導入された広範な新機能の統合に重点を置くとともに、PySide6 と Shiboken6 の両方にわたる複数の改良に対応しています。主な改善点として、@QEnum および @QFlag で修飾子付きの列挙型のサポートが強化され、Qt Designer 内のカスタムウィジェットのプロパティとして利用できるようになりました。さらに、オーバーライドされた Python 関数の呼び出しに関する大幅なパフォーマンス最適化が実装され、各種の型ヒントに関する問題が解決されました。これらの改良は、より堅牢で効率的な開発体験に貢献します。
Qt 6.10 のすべての変更点をまだ確認していない場合は、こちらをご覧ください。
今回の新しいリリースでは、C++ と Python を組み合わせたハイブリッドアプリケーションを作成する方から多く要望されていた機能を発表できることを嬉しく思います。
新しい Shiboken6Tools CMake パッケージは、shiboken_generator_create_binding 関数を導入し、C++ ライブラリ用の Python バインディングを生成するために必要な CMake コードを簡素化します。
これまで、Shiboken を CMake プロジェクトに統合するには、特定の PySide と Shiboken のパスを取得するための手動スクリプト作成、Shiboken バイナリの直接操作、インクルードパスとリンカーフラグの慎重な管理が必要で、長くてエラーが発生しやすい CMake コードになっていました。
新しい Shiboken6Tools CMake パッケージは、この複雑さを解消します。バインディングの設定と生成に CMake 関数を使用するだけで、すべての依存関係とパスが自動的に処理されます。使用方法は次のサンプルで確認できます。
|
|
新しい Shiboken6Tools CMake パッケージの使用方法の詳細については、ドキュメントとリファクタリングされた サンプルバインディングのサンプルをご覧ください。
注:Shiboken6Tools パッケージを見つけるには、SampleBinding のサンプルで示されているように ${Python_SITELIB}/shiboken6_generator/lib/cmake を CMAKE_PREFIX_PATH に追加する必要があります。手動作業を避けるには、scikit-build-core のようなモダンなビルドバックエンドを使用することで、Python 環境の site-packages から Shiboken6Tools パッケージを自動的に見つけることができます。
Shiboken は、Qt for Python プロジェクトの中核となる Python ヘルパーモジュールであり、バインディングジェネレータでもあります。PySide モジュールを作成するために Qt バインディングの生成を担当しています。今回のリリースのハイライトをいくつかご紹介します。
std::optional のサポートが改善され、型システムで std::optional が指定されている場合に、T から std::optional<T> への自動変換が追加されました。
std::optional<int> のようなテンプレートの特殊化を、コンバーターコードを持つプリミティブ型として指定できるようになり、カスタムスニペットによる手動作業の手間が省けます。
Shiboken は現在、Python の新しいマルチフェーズ初期化モデル(PEP 489)を使用するコードを生成するようになりました。これは、サブインタープリター(PEP684)やフリースレッド Python(PEP703)などの新しい Python 機能の継続的な研究の基礎となります。デプロイされたアプリケーションについては、Nuitka のサポートが不足しているため、従来のアプローチも引き続き利用可能です。
進行中の iOS 研究の副産物として、Shiboken のクロスコンパイルサポートが拡張されました。Clang ベースの C++ ヘッダーの解析が正しく機能するように、ターゲットプラットフォームとコンパイラを指定できるさまざまなオプションが shiboken に追加されました。ほとんどのオプションは、対応する CMake 変数の値に便利に設定できます。下記例を参照してください。
|
|
iOS 向けの包括的な PySide6 サポートの確立において、重要な初期進捗が達成されました。iOS 用のクロスコンパイル機能を正常に実装し、プラットフォーム固有のライブラリの生成を可能にしました。現在、QtCore および関連コンポーネントを含む非グラフィカルな Qt モジュールが有効化され、iOS 環境内で意図したとおりに動作しています。
現在の開発努力は、この基盤を拡張してグラフィカルな Qt モジュールを組み込み、iOS デバイス上での完全な UI レンダリング機能を有効にすることに焦点を当てています。この継続的な作業は、PySide6 のプラットフォームカバレッジを拡大する上での重要なマイルストーンを表しており、主に Android をサポートされるプラットフォームとして獲得した最近の成果に基づいています。この取り組みは、Apple のモバイルエコシステム向けの機能完全な Python ベースのアプリケーションの開発を促進します。
現在の開発状態を考慮すると、この機能は将来のリリースを目指していますが、当社の取り組みの一部がどこに向かっているのかをコミュニティにお知らせしたいと考えました。
Qt Bridges に関する最近の投稿をお読みになったかもしれません。これは、より慣用的な方法で Qt をより多くの言語に提供するために開発されている新しいプロジェクトです。Qt for Python との関連について疑問に思われるかもしれませんので、プロジェクトのいくつかの決定と方向性について説明し、ご自分のプロジェクトに適したソリューションを選択できるようにしたいと思います。
Qt Bridgeプロジェクトの Python ブリッジは、現在、PySide と Shiboken からお馴染みのいくつかのコンポーネント上に実装されています。つまり、データ変換、抽象化、QML との対話などのいくつかの技術的決定に関して、既存の仕組みを再構築しているわけではありません。
Python ブリッジの将来では、アプリケーションのフットプリントを小さくするために、Qt for Python への依存関係が削減されます。
Python ブリッジは、Qt を知らない Python 開発者向けに設計されており、Qt Quick を使用した UI に Python バックエンドを簡単に接続したいと考えています。通常の Qt ベースのアプローチではなく、Python の観点から PySide アプリケーションの開発を再考するものと考えることができます。
Python Bridge と Qt for Python は、異なるユースケースを念頭に置いて、おそらく異なるユーザーベースを持って共存し続けるプロジェクトです。このことに言及するのは、Qt for Python チームのほとんどが現在この新しいイニシアチブに取り組んでいるため、詳細をお知らせできることを非常に楽しみにしているからです。
このプロジェクトに興味がある場合は、今後数ヶ月で利用可能になるテクニカルプレビューにご期待ください。
ご覧のとおり、6.10 は Python 3.13 までをサポートしており、リリースされたばかりの 3.14 バージョンは含まれていません。
この主な理由は、マイナーリリースの全期間を通じて維持しようとする互換性にあります。最近の RC ではほとんどが機能していましたが、2日前の最終リリースですべてをテストする十分な時間がありませんでした。
最近発見したすべての問題に対処することで、Qt 6.11 でのサポートを予定しています。
フリースレッド Python はまだ研究段階であることに注意してください。GIL のない Python では、Qt イベントループとうまく連携するために独自のロックメカニズムを実装する必要があるため、非常に困難でした。
いつものように、次のコマンドを実行して最新バージョンを入手できます。
pip install pyside6
商用ユーザーの場合、
qtpip install pyside6
新しい実験的なサポート、機能、Python モジュール統合を試し続けたいと考えています。次に何をすべきでしょうか?メッセージをお寄せいただくか、JIRA で提案を開いてください 。
このリリースを楽しんでいただければ幸いです。いつものように、コミュニティプラットフォームにお立ち寄りいただき、何か正常に動作していない場合はバグレポートを作成してお知らせください。