16

在使用 Qt5(来自 WId)的 Windows 上获取 HWND的答案之一中,建议使用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>

应该工作(至少对我有用)。

这些 API 确实是私有的,但如果你必须使用它们,我想这比#ifdef为每个版本添加一个更好。

于 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 回答