【问题标题】:QT5 QPlatformNativeInterface and HWNDQT5 QPlatformNativeInterface 和 HWND
【发布时间】:2013-03-04 04:03:31
【问题描述】:

在对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>

works(仅包含 QPlatformNativeInterface 的前向声明)

【问题讨论】:

    标签: qt5 hwnd qtgui wid


    【解决方案1】:

    通过稍微搜索,似乎 QPlatformNativeInterface 目前是私有的,当这个库稳定时,将作为Qt Platform Abstraction 的一部分公开。

    【讨论】:

      【解决方案2】:

      你可以使用

      QT += gui-private
      

      在您的项目文件中,如在example plugin 中,然后只是

      #include <qpa/qplatformnativeinterface.h>
      

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

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

      【讨论】:

      • 像CMAKE这样的外部构建系统呢?
      • 我对 CMAKE 不熟悉。 :( 但我想你需要找到一些方法将 -I[include_path]/QtGui/[version]/QtGui 添加到 Makefiles。也许查看 qmake 源代码可能会有所帮助......
      【解决方案3】:

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

      find_package(Qt5Gui)
      include_directories(${Qt5Gui_PRIVATE_INCLUDE_DIRS})
      

      然后对源文件使用正常的包含:

      #include <qpa/qplatformnativeinterface.h>
      

      【讨论】:

        【解决方案4】:

        实际上 winId() 应该可以正常工作,但是您应该记住一个事实(在您链接到的答案中没有提到),这个 HWND 将根据请求生成。这就是 Qt 的工作方式,它使用所有者绘制工具并且不为所有内容创建标准窗口句柄(例如,您可以从 MSDN 中看到您的 Spy),但是一旦您要求 HWND,它就会创建一个适当的实体和向您返回一个有效的 HWND,以便 Spy 可以看到它(您可以在任何标准小部件上尝试此操作)

        【讨论】:

          猜你喜欢
          • 2012-12-12
          • 2015-05-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多