Widget mit absoluter Position und render-to-pixmap

Alles rund um die Programmierung mit Qt
Antworten
th3AddY
Beiträge: 11
Registriert: 7. Februar 2013 07:07

Widget mit absoluter Position und render-to-pixmap

Beitrag von th3AddY »

Hallo,

Ich habe ein QGLWidget, welches meine Szene rendert. Jegliche GUI soll nun in eine Textur gerendert werden, die dann auf einem Camera-aligned-quad angezeigt wird. Das funktioniert wunderbar, solange alles an Layouts ausgerichtet ist.

Folgender Aufbau bis jetzt:

Code: Alles auswählen

QGLWidget
  |- QGridLayout
       |- VirtualOverlay
Das VirtualOverlay erbt von QWidget und hat folgende Attribute:

Code: Alles auswählen

virtualOverlay->setAttribute(Qt::WA_DontShowOnScreen);
virtualOverlay->setAttribute(Qt::WA_TranslucentBackground);
Das Rendering des VirtualOverlays geschieht in QGLWidget::paintGL() vor dem Rendering der restlichen Szene und funktioniert in etwa so:

Code: Alles auswählen

QPixmap pix(width, height);
pix.fill(QColor(0,0,0,0));

virtualOverlay->render(&pix);
Bis hierhin funktioniert alles, wie ich es erwarte. Aus der Pixmap mache ich eine Textur, die dann auf dem Quad via OpenGL gerendert wird. Tastatur- und Mausevents kommen an, sodass Buttons etc. auch klickbar sind.

Jetzt zu dem Problem:

Ich möchte, dass Position und Größe des VirtualOverlay absolut angegeben werden können, sodass auch mehrere VirtualOverlays angezeigt werden können, die sich ggf. auch überlappen und unabhängig voneinander sind.
Dazu verzichte ich auf das QGridLayout und sage:

Code: Alles auswählen

virtualOverlay->setParent(glWidget);
virtualOverlay->setGeometry(x, y, width, height);
Das Problem ist nun, dass das VirtualOverlay zwar korrekt gerendert wird. Jedoch kommen keine Tastatur- und Mausevents mehr an. Buttons sind nicht mehr bedienbar etc...

Gibt es eine Möglichkeit, das irgendwie zu umgehen? Was genau ist die Ursache, dass bei absoluter Positionierung des Widgets die GUI events verschluckt werden?

Grüße
Daniel
th3AddY
Beiträge: 11
Registriert: 7. Februar 2013 07:07

Re: Widget mit absoluter Position und render-to-pixmap

Beitrag von th3AddY »

Ich habe den Fehler gefunden. Wenn ein Widget keinem Layout zugeordnet ist, muss QWidget::show() explizit aufgerufen werden. :roll:
Antworten