Qt - VowelCube 3D openGL

Gast #2028155
Lesenswert?

Hallo,

ich habe das QT und OpenGL Beispiel VowelCube getestet.
siehe: http://www.informit.com/articles/article.aspx?p=1405557&seqNum=2

Das Programm lässt sich kompilieren, jedoch bekommen ich im Debugfenster 
folgenden Fehler gemeldet.
"QPainter::begin: A paint device can only be painted by one painter at a 
time."

Was stimmt an dem Beispiel nicht?
Und was muss ich ändern, damit es richtig arbeitet?

im Anhnag gibt es als Zip das komplette Projekt und zusätzlich nochmal 
die cpp und h Datei.

Bin für jede Hilfe Dankbar.

noch ein schönes WE
Martin
Angehängte Dateien:
#2028258
Lesenswert?

Diese Meldung bekomme ich nicht. Dafür kommt:
1
QGLWidget::renderText(): Calling renderText() while a GL 2 paint engine is active on the same device is not allowed.

Was mir schon mal auffällt, ist, daß zwar von QGLWidget abgeleitet wird, 
aber die OpenGL-Kommandos nicht dort stehen, wo sie hingehörten. Zum 
Beispiel wird das komplette Zeichnen direkt in paintEvent() gemacht. 
Eigentlich sollten die OpenGL-Sachen in paintGL() durchgeführt werden.
Genauso werden die GL-Initialisierungen im Konstruktor und nicht in 
initializeGL() durchgeführt.
Und in paintEvent() wird dann erst ein QPainter erzeugt und dann, 
während dieser noch aktiv ist, mit OpenGL ins gleiche Fenster gerendet. 
Das ist wohl eigentlich nicht erlaubt.
Gast #2028285
Lesenswert?

Hallo,

hab gleich nochmal das zip aus dem anhang getestet, bekomme aber deinen 
fehler nicht.
Das Projekt wird kompiliert und bringt mir meinen Fehler...

Ich habe das Projekt nicht selber geschrieben.
Es ist ein Beispiel aus einem QT 
Buch...http://books.google.de/books?id=T373zcyFfvoC&pg=PA591&lpg=PA591&dq=VowelCube&source=bl&ots=W9xv6dH-aK&sig=lpak2JFqy3zJ03b2IN7ZPV7Kwuk&hl=de&ei=3wM7TeCTNMTMswao2rnzBg&sa=X&oi=book_result&ct=result&resnum=4&ved=0CD0Q6AEwAw#v=onepage&q=VowelCube&f=false

Ich weiß nicht wie aufwändig die Änderungen sind, jedoch bin ich noch 
blutiger anfänger in cpp und qt.
Könntest du mir daher sagen, was wie zu ändern ist?

Danke
Gast #2028339
Lesenswert?

Der Fehler liegt wahrscheinlich darin, dass mit renderText() nicht der 
GL-QPainter benutzt wird. Deshalb bringt er dir die Fehlermeldung das 
ein weiterer QPainter versucht auf das Widget zu zeichnen.

Abhilfe schafft:
in der main-function bevor du QApplication erzeugst diese Zeile 
einfügen:
1
QGL::setPreferredPaintEngine(QPaintEngine::OpenGL);

damit wird OpenGL für alle Zeichenaufgaben genutzt.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren