QT5 QPlatformNativeInterface и HWND

В одном из ответов на Get HWND на окнах с Qt5 (из WId) предлагается использовать QPlatformNativeInterface для восстановления обработчика собственного окна.

Чтобы получить доступ к заголовку QT, хотя в примере используется полный путь:

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

Это, конечно, не приемлемо как окончательное решение. Есть ли способ включить QPlatformNativeInterface, используя систему включения по умолчанию QT?

Обратите внимание, что ни

#include <QPlatformNativeInterface> 

работает (этот файл не генерируется во время сборки QT по умолчанию)

ни

#include <QGuiApplication>

работает (который содержит только предварительное объявление QPlatformNativeInterface)

4 ответа

Ты можешь использовать

QT += gui-private

в вашем файле проекта, как в примере плагина, а затем просто

#include <qpa/qplatformnativeinterface.h>

должно работать (у меня работает как минимум).

Эти API действительно являются частными, но если вам нужно их использовать, я думаю, это лучше, чем добавлять #ifdef для каждой версии.

Для CMake вам придется использовать это:

find_package(Qt5Gui)
include_directories(${Qt5Gui_PRIVATE_INCLUDE_DIRS})

и затем используйте обычное включение для вашего исходного файла:

#include <qpa/qplatformnativeinterface.h>

При поиске немного больше, кажется, что QPlatformNativeInterface в настоящее время является закрытым и станет общедоступным как часть абстракции платформы Qt, когда эта библиотека стабилизируется.

На самом деле winId() должен работать нормально, НО вы должны иметь в виду факт (который не упоминается в ответе, с которым вы связаны), что этот HWND будет сгенерирован UPON-запросом. Так работает Qt, он использует средство рисования владельца и не создает стандартные дескрипторы окон для всего (вы можете увидеть это, например, вы Spy из MSDN), но как только вы запрашиваете HWND, он создаст соответствующую сущность и вернет вам действительный HWND, так что он будет виден для шпиона (вы можете попробовать это на любом стандартном виджете)

Другие вопросы по тегам