Qt GUI の変更点

Qt 6 は、フレームワークをより効率的で使いやすくするための意識的な努力の結果です。

私たちは各リリースにおいて、すべての公開APIのバイナリとソースの互換性を維持しようと努めています。しかし、Qt をより良いフレームワークにするために避けられない変更もあります。

このトピックでは、Qt GUIにおけるそれらの変更点を要約し、それらを扱うためのガイダンスを提供します。

カーネルクラス

QBitmap クラス

QPixmap からのQBitmap の暗黙的な構築はサポートされなくなりました。コンストラクタと代入演算子は明示的になり、非推奨とマークされました。代わりに新しい静的ファクトリ関数fromPixmap を使用してください。

QCursor クラス

QPixmap からのQCursor の暗黙的な構築はサポートされなくなり、コンストラクタは明示的になりました。

QKeyCombination クラス

QKeyCombination は、キーとオプションの修飾子の組み合わせを格納するための新しいクラスです。これは、 列挙型の値を型安全な方法で修飾子と組み合わせるための代替クラスとして使用する必要があります。Qt::Key

将来の C++ 標準では、関連性のない列挙型間の算術演算は違法であると宣言される可能性があるため、現在 operator+() を使用してキーと修飾子を組み合わせているコードは移行することをお勧めします。operator|()を使用し、int を期待するAPIは、代わりにQKeyCombination を期待するように変更してください。

キーの組み合わせにint を期待する既存のAPIは、QKeyCombination::toCombined ()を使用して呼び出すことができます。

テキスト・クラス

QFontDatabase クラス

QFontDatabase クラスは静的メンバ関数のみを持つようになりました。コンストラクタは非推奨になりました。例えば

const QStringList fontFamilies = QFontDatabase().families();

の代わりに

const QStringList fontFamilies = QFontDatabase::families();

QFont クラス

QFont::Weight 列挙体の数値は、OpenType のウェイト値と一致するように変更されました。QFont::setWeight() はint の代わりに列挙値を期待し、整数値でセッターを呼び出すコードはコンパイルに失敗します。古い整数値を使い続けるには、QFont::setLegacyWeight() を使用してください。

ペイントクラス

QPagedPaintDevice やその他の印刷関連クラスについては、Qt Print Supportの移植ガイドを参照してください。

ユーティリティクラス

QIntValidator および QDoubleValidator

setRange() メソッドは、仮想としてマークされなくなりました。

OpenGL クラス

Qt のレンダリング基盤として Qt RHI が導入されたことに伴い、QOpenGL をプレフィックスとするほとんどのクラスはQt OpenGLモジュールに移動しました。

詳細はQt OpenGL移植ガイドを参照してください。

特筆すべき例外はQOpenGLContext というクラスで、これはまだ Qt GUI に存在しています。

さらに、QOpenGLWidget というクラスは、Qt OpenGL Widgets という新しいモジュールに移動しました。

QOpenGLContext クラス

QOpenGLContext::versionFunctions()関数は、QOpenGLVersionFunctionsFactory::get()に置き換えられました。QOpenGLVersionFunctionsFactory は、Qt OpenGLモジュールの一部で、パブリッククラスになりました。

ANGLE

Windows では、サードパーティの OpenGL ES から Direct 3D へのトランスレータである ANGLE は Qt に含まれなくなりました。これは、Qt::AA_UseOpenGLES と環境変数QT_OPENGL=angle がもはや何の効果も持たないことを意味します。動的な OpenGL ビルドでは、OpenGL の初期化に失敗しても ANGLE に自動的にフォールバックすることはありません。OpenGLを直接使用するQWindow またはQWidget ベースのアプリケーション(たとえばQOpenGLWidget 経由)の場合、これは実行時にOpenGLが唯一の選択肢であることを意味します。しかし、ビルド済みの Qt パッケージに同梱されている Mesa llvmpipe のような、純粋なソフトウェア OpenGL 実装を使うという選択肢もあります。Qt Quick および Qt Quick 3D アプリケーションでは、Qt 6 は OpenGL に加えて Direct 3D 11、Vulkan、Metal のサポートを導入しています。Windows ではデフォルトで Direct 3D が選択されるため、OpenGL 以外のグラフィックス API もサポートされることで、ANGLE の削除が緩和されます。

ネイティブクリップボードの統合

Qt 5 では、QtMacExtrasQMacPasteboardMime や、Windows QPA API のQWindowsMime を通じて、プラットフォーム固有またはカスタムのクリップボード形式を Qt に統合するインターフェイスが提供されていました。Qt 6.6 以降、同等の機能は macOS 用のクラスQUtiMimeConverter と Windows 用のクラスQWindowsMimeConverter によって提供されています。

QWindowsMime からQWindowsMimeConverter への移植は、仮想インターフェイスが同一であるため、実質的に変更は必要ありません。しかし、Qt 6 では、QWindowsMimeConverter の実装を登録する必要はなくなりました。型をインスタンス化することで、コンバータが暗黙的に登録されます。

QMacPasteboardMime をQUtiMimeConverter に移植するには、いくつかの仮想関数の名前を変更する必要があります。QMacPasteboardMime をQMacPasteboardMime に移植するには、いくつかの仮想関数の名前を変更する必要があります。 API では、macOS のネイティブクリップボードフォーマットとしてflavor という古い用語が使われていましたが、現在ではUniform Type Identifiers 、つまりUTIs が使われています。

mimeForflavorFor 関数は、それぞれmimeForUtiutiForMime の実装に置き換えられています。これらの関数は、コンバータが入力フォーマットを変換できる MIME タイプまたはUTI の名前を返すので、通常は既存のオーバーライドの名前を変更するだけで移植できます。QUtiMimeConverterconvertToMime,convertFromMime,count 関数は QMacPasteboardMime バージョンと同じです。

canConvert,converterName 関数はもはや必要なく、上記の関数の実装によって暗示されているので、これらの関数のオーバーライドは削除できます。

QWindowsMimeConverter と同様に、登録は型をインスタンス化することで行います。

©2024 The Qt Company Ltd. 本書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。