QT5 QPlatformNativeInterface和HWND

时间:2013-03-15 12:25:52

标签: qt5 hwnd qtgui wid

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的前向声明

4 个答案:

答案 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可以看到它(您可以在任何标准小部件上尝试这个)