2013-03-15 16 views
12

In einer der Antworten auf Get HWND on windows with Qt5 (from WId) wird vorgeschlagen, QPlatformNativeInterface zu verwenden, um den systemeigenen Fensterhandler wiederherzustellen.QT5 QPlatformNativeInterface und HWND

Um die QT-Header zugreifen, obwohl das Beispiel des vollständigen Pfad verwendet:

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

Dies ist natürlich nicht akzeptabel, da eine endgültige Lösung ist. Gibt es eine Möglichkeit, QPlatformNativeInterface mit dem Standard-Einschluss-System von QT einzuschließen?

Beachten Sie, dass weder

#include <QPlatformNativeInterface> 

Werke

(diese Datei wird während der Standard-QT-Build generiert)

noch

#include <QGuiApplication> 

Werke (die nur eine Vorwärtsdeklaration von QPlatformNativeInterface enthält)

Antwort

1

Durch die Suche ein wenig mehr scheint es, dass QPlatformNativeInterface ist derzeit privat und wird als Teil der Qt Platform Abstraction veröffentlicht werden, wenn diese Bibliothek zu stabilisieren.

9

können Sie

QT += gui-private 

in Ihrer Projektdatei

#include <qpa/qplatformnativeinterface.h> 

sollte funktionieren nur, wie in der example plugin, und verwenden Sie dann (für mich zumindest funktioniert).

Diese APIs sind in der Tat privat, aber wenn Sie sie verwenden müssen, denke ich, das ist besser als ein #ifdef für jede Version hinzufügen.

+0

Was ist mit externem Build-System wie CMAKE? – Pierluigi

+0

Ich bin nicht vertraut mit CMAKE. :(Aber ich denke, du musst einen Weg finden, um -I [include_path]/QtGui/[version]/QtGui zu Makefiles hinzuzufügen. Vielleicht könnte das Betrachten von qmake Quellen helfen ... – jkozera

6

Für CMake, werden Sie diese verwenden müssen:

find_package(Qt5Gui) 
include_directories(${Qt5Gui_PRIVATE_INCLUDE_DIRS}) 

und verwenden Sie dann die normale für die Quelldatei enthalten:

#include <qpa/qplatformnativeinterface.h> 
0

Eigentlich winId() sollte gut funktionieren, aber Sie Bitte beachten Sie eine Tatsache (die in einer Antwort nicht erwähnt wird), dass diese HWND auf Anfrage generiert wird. Das ist die Art und Weise, wie Qt funktioniert, die Verwendung der Draw-Funktion des Besitzers und nicht die Erstellung von Standard-Windows-Handles für alles (Sie können dies beispielsweise von MSDN Spy sehen), aber sobald Sie nach HWND fragen, wird es eine passende Entität erstellen und Geben Sie ein gültiges HWND zurück, so dass es für Spy sichtbar ist (Sie können dies auf jedem Standard-Widget ausprobieren)