プラットフォームの統合
アプリケーション開発のためのクロスプラットフォームツールキットとしてのQtの主な強みは、ターゲットプラットフォームごとにアプリケーションコードを複製する必要性を排除することです。
Qtはアプリケーションを書く際の典型的なタスクの多くを解決してくれますが、Qtではカバーできないコーナーケースや、プラットフォーム固有のAPIや他のツールキットの上に機能を構築した方が理にかなっているケースも常に存在します。
このようなユースケースをサポートしつつ、アプリケーションロジックの大部分を Qt で処理できるようにするために、Qt は単純な型変換からプラットフォーム固有のネイティブインターフェースまで、幅広いプラットフォーム統合 API を提供しています。
型変換
Qt の基本的なデータ型の多く(QString 、QPoint 、QImage など)は、ネイティブの等価な型との変換を提供します。
例えば、Appleプラットフォームで現在のユーザーのユーザー名を取得する場合などです:
NSProcessInfo *processInfo = NSProcessInfo.processInfo; QString userName = QString::fromNSString(processInfo.userName)
すべての型変換の完全なリストについては、型変換の概要を参照してください。
ウィンドウの埋め込み
基礎となるプラットフォーム API によって作成されたウィンドウは、Qt ウィンドウの親コンテナとして使用することも、子ウィンドウとして Qt ウィンドウに埋め込むこともできます。
前者は、アプリケーションが主にネイティブのプラットフォーム API を使用して書かれている場合に便利ですが、特殊な UI を描画するためなど、アプリケーションの一部に Qt を使用する場合に便利です。Qtをネイティブアプリケーションのウィンドウ階層に組み込むには、QWindow::winId ()を使用してQtウィンドウのネイティブハンドルを取得し、ネイティブAPIを使用してウィンドウをネイティブUIに再ペアレントします。
後者は、ネイティブプラットフォームや他のツールキットが、特殊なコントロールをネイティブウィンドウとして公開している場合に便利です。QWindow::fromWinId() を使用してネイティブ・ウィンドウ・ハンドルをQWindow でラップすることで、ウィンドウを他のQWindow と同様に Qt ウィンドウ階層に再ペアレントすることができます。このQWindow を Qt ウィジェットベースの UI に再ペアレントするには、ウィジェット固有のQWidget::createWindowContainer() 関数を使用します。
イベント処理
Qt でのイベント処理のほとんどの用途は、QWindow::event() やその友人、QObject::installEventFilter() を介したクロスプラットフォームのイベント配信で十分にカバーできます。
これが十分でない場合、Qt はネイティブイベントの配信へのアクセスを提供します。すべてのネイティブイベントを受信するグローバルイベントフィルタはQCoreApplication::installNativeEventFilter() でインストールでき、ウィンドウごとのネイティブイベントはQWindow::nativeEvent() で処理できます。
注意: ネイティブイベントフローに干渉すると、Qt が矛盾した状態になる可能性があります。これらのAPIは、Qtがまだ扱っていないイベントなど、Qtの既存のイベント処理を補強するために使用します。
ネイティブインターフェース
上記のAPIでカバーされていないプラットフォーム固有の機能は、Qtのより汎用的なネイティブインターフェイス機構によって処理されます。インターフェースは、拡張するクラスのネイティブ API やプラットフォーム固有の API へのアクセスを提供します。
インターフェースはQNativeInterface ネームスペースに存在し、基盤となるネイティブ・ハンドルへのアクセス、既存のネイティブ・ハンドルの採用、プラットフォーム固有の API の提供などのユースケースをカバーします。
例えば、QNativeInterface::QCocoaGLContext ネイティブ・インターフェースを介して、macOS 上のQOpenGLContext の基礎となる NSOpenGLContext にアクセスします:
using namespace QNativeInterface; if (auto *cocoaGLContext = glContext->nativeInterface<QCocoaGLContext>()) [cocoaGLContext->nativeContext() makeCurrentContext];
すべてのネイティブ・インターフェースの完全なリストは、ネイティブ・インターフェースの概要を参照してください。
警告 つまり、これらのインターフェイスを使用するアプリケーションは、そのアプリケーションが開発された Qt のバージョンでのみ動作することが保証されています。
プラットフォームサポート
アプリケーション開発者向けの API に加えて、Qt ではクロスプラットフォームなビルディングブロックの実装を提供する際にもプラットフォームとのインタフェースを提供します。
例えば、Qt Coreのイベントディスパッチャの抽象化や、RHI のレンダリングハードウェアの抽象化です。
ここでの主な抽象化レイヤーはQt Platform Abstraction、略して QPA で、ウィンドウ システムの統合と関連するユースケースを扱います。
本書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。