プラットフォームの統合
アプリケーション開発のためのクロスプラットフォームツールキットとしての 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 Widget ベースの UI に再ペアレントするには、Widget 固有の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 で、ウィンドウ システムの統合と関連するユースケースを扱います。
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.