2013-03-20 10 views
6

Ich versuche herauszufinden, die Hintergrundfarbe eines QWidget oder QGLWidget, so dass ich es mit qglClearColor() verwenden kann, um den OpenGL-Teil nativ innerhalb des Widgets erscheinen (ohne zum Beispiel einen schwarzen Hintergrund).Wie bekomme ich Widget Hintergrund QColor

Ich dachte, ich könnte backgroundRole() meines Widgets holen, aber ich habe Probleme, es in eine QColor zu konvertieren. Es gibt QPalette::color(QColorRole) aber es ist nicht statisch und ich habe keine Ahnung, wie ich eine Instanz von QPalette erstellen müsste, um die Transformation durchzuführen.

+1

Haben Sie versucht, 'qApp-> palette()' aufzurufen, um eine anwendungsweite Palette zu erhalten, und rufen Sie dann 'QPalette :: pinsel()' oder 'QPalette :: color()'? – user2155932

Antwort

17

Verwenden Sie QWidget::palette().color(QWidget::backgroundRole()), um die Farbe der Hintergrundfarbrolle für dieses Widget zu erhalten. Natürlich sollte dies auch mit jeder Klasse funktionieren, die QWidget erbt.

+0

Edit: es funktioniert, danke! –

+0

Ihr Aufruf an 'qglClearColor' ist NICHT in Ihrem Konstruktorrecht der QGLWidget-Unterklasse? Es sollte in intializeGL, paintGL oder irgendeiner anderen der Funktionen sein, die nur aufgerufen werden können, nachdem Ihr OpenGL-Kontext eingerichtet wurde. –

+0

Ja, es ist in initializeGL. Ich habe vergessen, 'glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);' zu 'paintG()' hinzuzufügen. –

Verwandte Themen