2013-03-15 6 views
12

В одном из ответов Get HWND on windows with Qt5 (from WId) предлагается использовать QPlatformNativeInterface, чтобы восстановить собственный обработчик окна.QT5 QPlatformNativeInterface и HWND

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

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

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

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

#include <QPlatformNativeInterface> 

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

ни

#include <QGuiApplication> 

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

ответ

1

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

9

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

QT += gui-private 

в файле проекта, как в example plugin, а затем просто

#include <qpa/qplatformnativeinterface.h> 

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

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

+0

как насчет внешней системы сборки, такой как CMAKE? – Pierluigi

+0

Я не знаком с CMAKE. :(Но я думаю, вам нужно найти способ добавить -I [include_path]/QtGui/[version]/QtGui в Make-файлы. Возможно, поиск источников qmake может помочь ... – jkozera

6

Для CMake, вы должны использовать это:

find_package(Qt5Gui) 
include_directories(${Qt5Gui_PRIVATE_INCLUDE_DIRS}) 

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

#include <qpa/qplatformnativeinterface.h> 
0

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