2013-03-15 15 views
12

Get HWND on windows with Qt5 (from WId)への回答の1つで、ネイティブウィンドウハンドラを回復するために、QPlatformNativeInterfaceを使用することをお勧めします。 QTヘッダにアクセスするQT5 QPlatformNativeInterfaceとHWND

例では、そのフルパス使用かかわら:

#include <QtGui/5.0.0/QtGui/qpa/qplatformnativeinterface.h> 

これは、もちろん、決定的な解決策としては受け入れられません。 含める方法はありますか?QPlatformNativeInterface QTのデフォルトの組み込みシステムを使用していますか?

お知らせ

#include <QPlatformNativeInterface> 

作品(このファイルは、デフォルトのQTのビルド時に生成されていません)

#include <QGuiApplication> 

のみQPlatformNativeInterfaceの前方宣言が含まれていた作品(どちらもその

答えて

1

少しずつ検索すると、QPlatformNativeInterfaceは現在プライベートであり、このライブラリが安定するとQt Platform Abstractionの一部として公開されます。

9

あなたはexample pluginのように、プロジェクトファイルに

QT += gui-private 

を使用することができ、その後、ちょうど

#include <qpa/qplatformnativeinterface.h> 

は(少なくとも私にとっては作品を)動作するはずです。

これらのAPIは実際にはプライベートですが、使用する必要がある場合は、各バージョンに#ifdefを追加するよりも優れていると思います。通常は、ソースファイルのために含める使用し、その後

find_package(Qt5Gui) 
include_directories(${Qt5Gui_PRIVATE_INCLUDE_DIRS}) 

をして::

+0

CMAKEのような外部ビルドシステムはどうですか? – Pierluigi

+0

私はCMAKEに慣れていません。 :(しかし、私は、あなたがMakefileに-I [include_path]/QtGui/[version]/QtGuiを追加する方法を見つける必要があると思います。 – jkozera

6

はCMakeのために、あなたはこれを使用する必要があります

#include <qpa/qplatformnativeinterface.h> 
0

実はwinId()正常に動作する必要がありますが、あなたこのHWNDがUPONリクエストで生成されるという事実(あなたがリンクしている答えには記載されていない)を覚えておくべきです。それはQtが動作する方法であり、そのオーナーは描画機能を使用しており、すべてのために標準的なウィンドウハンドルを作成しません(MSDNのスパイのように見せてもらえます)。しかし、HWNDを要求すると、有効なHWNDを返すので、Spyで表示されます(標準のウィジェットでこれを試すことができます)