16

Get HWND on windows with Qt5 (WId から)に対する回答の 1 つで、ネイティブ ウィンドウ ハンドラーを回復するためにQPlatformNativeInterfaceを使用することをお勧めします。

この例ではフル パスを使用していますが、QT ヘッダーにアクセスするには、次のようにします。

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

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

どちらでもないことに注意してください

#include <QPlatformNativeInterface> 

動作します (このファイルはデフォルトの QT ビルドでは生成されません)

または

#include <QGuiApplication>

動作します ( QPlatformNativeInterfaceの前方宣言のみが含まれます )

4

4 に答える 4

12

使用できます

QT += gui-private

サンプルプラグインのように、プロジェクトファイルで、

#include <qpa/qplatformnativeinterface.h>

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

#ifdefこれらのAPIは確かにプライベートですが、使用する必要がある場合は、バージョンごとにを追加するよりも優れていると思います。

于 2013-03-21T19:14:16.203 に答える
10

CMake の場合、これを使用する必要があります。

find_package(Qt5Gui)
include_directories(${Qt5Gui_PRIVATE_INCLUDE_DIRS})

次に、ソース ファイルに通常のインクルードを使用します。

#include <qpa/qplatformnativeinterface.h>
于 2014-01-29T17:47:46.087 に答える
1

もう少し検索すると、QPlatformNativeInterfaceは現在プライベートであり 、このライブラリが安定したときにQtプラットフォーム抽象化の一部としてパブリックに公開されるようです。

于 2013-03-15T12:47:14.617 に答える
0

実際には winId() は正常に動作するはずですが、この HWND が UPON 要求で生成されるという事実 (リンク先の回答には記載されていません) に留意する必要があります。これが Qt の動作であり、所有者描画機能を使用し、すべての標準ウィンドウ ハンドルを作成しません (MSDN の Spy などで確認できます) が、HWND を要求するとすぐに、適切なエンティティが作成され、有効な HWND を返すので、Spy で表示されます (標準のウィジェットでこれを試すことができます)。

于 2016-04-04T10:56:43.563 に答える