在Get HWND on windows with Qt5 (from WId)的一个答案中,建议使用 QPlatformNativeInterface 来恢复本机窗口处理程序。
要访问QT标头,尽管该示例使用其完整路径:
#include <QtGui/5.0.0/QtGui/qpa/qplatformnativeinterface.h>
当然,这不是一个明确的解决方案。 有没有办法使用QT的默认包含系统包含 QPlatformNativeInterface ?
请注意,
#include <QPlatformNativeInterface>
有效(默认QT构建期间不会生成此文件)
也不是
#include <QGuiApplication>
有效(仅包含 QPlatformNativeInterface的前向声明)
答案 0 :(得分:10)
您可以使用
QT += gui-private
在项目文件中,如example plugin,然后只需
#include <qpa/qplatformnativeinterface.h>
应该有用(至少对我有用)。
这些API确实是私有的,但如果你必须使用它们,我想这比为每个版本添加#ifdef
要好。
答案 1 :(得分:8)
对于CMake,你必须使用它:
find_package(Qt5Gui)
include_directories(${Qt5Gui_PRIVATE_INCLUDE_DIRS})
然后使用源文件的普通include:
#include <qpa/qplatformnativeinterface.h>
答案 2 :(得分:1)
通过稍微搜索,似乎 QPlatformNativeInterface 目前是私有的,并且当此库稳定时,它将作为Qt Platform Abstraction的一部分公开。
答案 3 :(得分:0)
实际上winId()应该可以正常工作,但是你应该记住一个事实(你在链接的答案中没有提到),这个HWND将在UPON请求中生成。这就是Qt工作的方式,它使用所有者绘制工具并且不为所有东西创建标准的窗口句柄(例如,您可以看到这是来自MSDN的间谍),但是一旦要求HWND,它将创建一个适当的实体并且返回一个有效的HWND,因此Spy可以看到它(您可以在任何标准小部件上尝试这个)