2013-03-15 22 views
12

W jednej z odpowiedzi na Get HWND on windows with Qt5 (from WId) sugeruje się użycie QPlatformNativeInterface w celu odzyskania macierzystej procedury obsługi okna.QT5 QPlatformNativeInterface i HWND

Aby uzyskać dostęp do nagłówka QT chociaż przykład wykorzystuje swoją pełną ścieżkę:

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

To, oczywiście, nie jest do zaakceptowania jako ostatecznego rozwiązania. Czy istnieje sposób włączenia QPlatformNativeInterface przy użyciu domyślnego systemu wprowadzania QT?

Zauważ, że ani

#include <QPlatformNativeInterface> 

prace (ten plik nie jest generowany podczas domyślnego build QT)

ani

#include <QGuiApplication> 

robót (który zawiera tylko do przodu deklarację QPlatformNativeInterface)

Odpowiedz

1

Poszukując trochę więcej, wydaje się, że QPlatformNativeInterface jest obecnie prywatny i zostanie udostępniony publicznie w ramach Qt Platform Abstraction, gdy ta biblioteka się ustabilizuje.

9

Można użyć

QT += gui-private 

w pliku projektu, jak w example plugin, a potem po prostu

#include <qpa/qplatformnativeinterface.h> 

powinien działać (działa przynajmniej dla mnie).

Te interfejsy API są rzeczywiście prywatne, ale jeśli trzeba z nich korzystać, myślę, że jest to lepsze rozwiązanie niż dodanie do każdej wersji #ifdef.

+0

co z zewnętrznym systemem kompilacji, takim jak CMAKE? – Pierluigi

+0

Nie jestem zaznajomiony z CMAKE. :(Ale myślę, że musisz znaleźć jakiś sposób dodania -I [include_path]/QtGui/[version]/QtGui do Makefiles. Może spojrzenie na źródła qmake mogłoby pomóc ... – jkozera

6

Dla CMake, będziesz musiał użyć tego:

find_package(Qt5Gui) 
include_directories(${Qt5Gui_PRIVATE_INCLUDE_DIRS}) 

a następnie użyj normalnie należą do pliku źródłowego:

#include <qpa/qplatformnativeinterface.h> 
0

Właściwie Winid() powinien działać dobrze, ale ty należy pamiętać o fakcie (który nie jest wymieniony w odpowiedzi, z którą się łączysz), że ten HWND zostanie wygenerowany na żądanie. W ten sposób działa Qt, korzystając z funkcji rysowania właściciela i nie tworzy standardowych uchwytów okien dla wszystkiego (możesz to zobaczyć na przykład Spy z MSDN), ale gdy tylko poprosisz o HWND, utworzy on odpowiedni obiekt i zwróci Ci prawidłowy HWND, więc będzie widoczny dla Szpiega (możesz wypróbować to na dowolnym standardowym widżecie)