QT5 QPlatformNativeInterface and HWND



在Qt5(从WId)的windows上获取HWND的答案之一中,建议使用QPlatformNativeInterface以恢复本机窗口处理程序。

通过示例使用其完整路径访问QT头文件:

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

当然,这不能作为一个确定的解决方案。是否有一种方法来包括QPlatformNativeInterface使用QT的默认包含系统?

注意

#include <QPlatformNativeInterface> 

工作(这个文件不是在默认的QT构建期间生成的)

#include <QGuiApplication>

工作(它只包含QPlatformNativeInterface的前向声明)

可以使用

QT += gui-private

在你的项目文件中,就像在示例插件中一样,然后只是

#include <qpa/qplatformnativeinterface.h>

应该有效(至少对我有效)。

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

对于CMake,你必须使用这个:

find_package(Qt5Gui)
include_directories(${Qt5Gui_PRIVATE_INCLUDE_DIRS})

,然后对源文件使用正常的include:

#include <qpa/qplatformnativeinterface.h>

通过更多的搜索,似乎QPlatformNativeInterface目前是私有的,当这个库稳定时,将作为Qt平台抽象的一部分公开。

实际上winId()应该工作得很好,但是你应该记住一个事实(在你链接到的答案中没有提到),这个HWND将在请求时生成。这就是Qt的工作方式,它使用所有者绘制工具,不创建标准的窗口句柄的一切(你可以看到这,例如你从MSDN间谍),但一旦你要求HWND它将创建一个适当的实体,并返回给你一个有效的HWND,所以它将是可见的间谍(你可以尝试这在任何标准的小部件)

最新更新