2013-03-15 23 views
12

In una delle risposte a Get HWND on windows with Qt5 (from WId) è consigliabile utilizzare QPlatformNativeInterface per ripristinare il gestore di finestra nativo.QT5 QPlatformNativeInterface e HWND

Per accedere intestazione QT se l'esempio utilizza il percorso completo:

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

Questo, naturalmente, non è accettabile come soluzione definitiva. C'è un modo per includere QPlatformNativeInterface utilizzando il sistema di inclusione predefinito di QT?

Si noti che né

#include <QPlatformNativeInterface> 

opere (questo file non viene generato durante il QT predefinito build)

#include <QGuiApplication> 

opere (che contiene solo una dichiarazione anticipata di QPlatformNativeInterface)

risposta

1

Cercando un po 'di più sembra che QPlatformNativeInterface sia attualmente privato e verrà reso pubblico come parte dello Qt Platform Abstraction quando questa libreria si stabilizzerà.

9

È possibile utilizzare

QT += gui-private 

nel file di progetto, come nel example plugin, e poi basta

#include <qpa/qplatformnativeinterface.h> 

dovrebbe funzionare (che funziona per me almeno).

Queste API sono effettivamente private, ma se si devono usare, credo che sia meglio che aggiungere uno #ifdef per ogni versione.

+0

e il sistema di build esterno come CMAKE? – Pierluigi

+0

Non ho familiarità con CMAKE. :(Ma immagino tu abbia bisogno di trovare un modo per aggiungere -I [include_path]/QtGui/[versione]/QtGui ai Makefile.Forse guardare le fonti qmake potrebbe aiutare ... – jkozera

6

Per CMake, dovrete utilizzare questo:

find_package(Qt5Gui) 
include_directories(${Qt5Gui_PRIVATE_INCLUDE_DIRS}) 

e quindi usare il normale includere per il file sorgente:

#include <qpa/qplatformnativeinterface.h> 
0

realtà WinID() dovrebbe funzionare bene, ma si dovrebbe tenere a mente un fatto (che non è menzionato in una risposta a cui sei collegato), che questo HWND verrà generato una richiesta UPON. Questo è il modo in cui funziona Qt, usa la funzione di creazione del proprietario e non crea maniglie di Windows standard per tutto (puoi vedere questo per esempio Spy da MSDN), ma non appena chiedi HWND creerà un'entità appropriata e ti restituisco un HWND valido, quindi sarà visibile per Spy (puoi provarlo su qualsiasi widget standard)