Widget mit absoluter Position und render-to-pixmap
Verfasst: 5. Dezember 2017 21:31
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:
Das VirtualOverlay erbt von QWidget und hat folgende Attribute:
Das Rendering des VirtualOverlays geschieht in QGLWidget::paintGL() vor dem Rendering der restlichen Szene und funktioniert in etwa so:
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:
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
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
Code: Alles auswählen
virtualOverlay->setAttribute(Qt::WA_DontShowOnScreen);
virtualOverlay->setAttribute(Qt::WA_TranslucentBackground);
Code: Alles auswählen
QPixmap pix(width, height);
pix.fill(QColor(0,0,0,0));
virtualOverlay->render(&pix);
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);
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