2013-03-15 175 views
12

在其中一个Get HWND on windows with Qt5 (from WId)的回答中,建议采用QPlatformNativeInterface以恢复本机窗口处理程序。QT5 QPlatformNativeInterface和HWND

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

此,当然,不是作为一个明确的解决办法上可接受的:

为了虽然例子中使用它的完整路径访问QT报头。 有没有办法使用QT的默认纳入系统包括QPlatformNativeInterface

注意,既不

#include <QPlatformNativeInterface> 

作品

也不

#include <QGuiApplication> 

作品(其中只包含QPlatformNativeInterface的预先声明(默认QT构建过程中不产生这个文件)

回答

1

通过搜索一点点似乎QPlatformNativeInterface目前私人和将被公开作为Qt Platform Abstraction的一部分时,该库将趋于稳定。

9

您可以使用

QT += gui-private 
在您的项目文件

,如example plugin,然后就

#include <qpa/qplatformnativeinterface.h> 

应该工作(至少对我的作品)。

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

+0

怎么样外部构建系统,如cmake的? – Pierluigi 2013-04-04 09:43:50

+0

我不熟悉CMAKE。 :(但我想你需要找到一些方法来添加-I [include_path]/QtGui/[版本]/QtGui到Makefiles。也许看着qmake源码可能有帮助... – jkozera 2013-04-05 10:34:09

6

对于CMake的,你将不得不使用这样的:

find_package(Qt5Gui) 
include_directories(${Qt5Gui_PRIVATE_INCLUDE_DIRS}) 

,然后使用普通的包括源文件:

#include <qpa/qplatformnativeinterface.h> 
0

其实winId()应该工作正常,但你应该记住一个事实(在你连接的答案中没有提到),这个HWND将在请求时生成。这是Qt的工作原理,使用它的主人平局设施,并没有创建标准的Windows的方式处理一切(你可以看到这个,比如你间谍来自MSDN),但只要你所要求的HWND它会创建一个适当的实体,回报你一个有效的HWND,所以这将是可见的间谍(你可以试试这个在任何标准的小部件)