2015-09-16 13 views
5

Zajmuję się tworzeniem aplikacji Qt, która używa Cocoa na Macu i używam PowerVR SDK, aby umożliwić OpenGL ES 2.0 na Mac Desktop.OpenGL rysuje nad widżetami w Qt

udało mi się dostać to działa, wszystko świadczy doskonale, że problem jest że gdy tworzę widżet w tym oknie, OpenGL renderuje nad nim, np Tworzę QLabel i renderuje ponad to sprawia, że ​​etykieta jest niewidoczna.

Próbowałem wywołać metodę repaint QLabel() po renderowaniu pojedynczej ramki OpenGL, ale to nie pomogło.

Czy ktoś napotkał taki lub podobny problem i ma jakieś sugestie?

Dzięki!

+0

Ten sam problem, także w systemie Windows. OpenGL rysuje nawet na paskach narzędzi. –

+0

_Muszę sprawić, żeby działało, wszystko się idealnie zgadza, problem polega na tym, że kiedy tworzę widżet w tym oknie_ Co używasz do stworzenia "tego okna"? – LukasT

+0

@LukasT Klasa, która rozszerza QMainWindow, w zasadzie jest to okno Qt, które owija się wokół Cocoa, i przekazuję wartość zwróconą przez funkcję winId() do eglCreateWindowSurface –

Odpowiedz

1

Jeśli chcesz, aby widgety współpracowały z treścią OpenGL, musisz użyć QOpenGLWidget. Rysuje do bufora poza ekranem, który następnie jest łączony z widżetami.

Możesz też samemu wyrenderować etykietę do tekstury i zastosować teksturę do kwadratu.

+0

Chciałbym móc to zrobić, ale używam ograniczonego do używania sterownika OpenGL z PowerVR, i nie współpracuję z QOpenGLWidget, alternatywny sposób jest zbyt ekspansywny –

+0

@MaxRaskin "alternatywny sposób jest zbyt drogi" To nie jest. To niemożliwe. Jak sądzisz, w co się angażujesz? Qt wykonuje całą kompozycję widgetów w oprogramowaniu. W najlepszym wypadku etykieta robi nieprzezroczysty rysunek w sklepie z podkładem okna. Kiedy renderujesz go do 'QImage', robisz to samo - pamiętaj, że urządzenie do malowania sklepu jest tylko' QImage'! Co więcej, musisz tylko renderować etykietę, gdy zmienia się jej tekst lub styl. Jest tak niski, jak to tylko możliwe. –

+0

Miałem na myśli drogie w czasie realizacji, a nie w wydajności, miałem na myśli, czy jest mniej skomplikowany sposób to zrobić –

Powiązane problemy