Forum: PC-Programmierung Qt - VowelCube 3D openGL


von Martin (Gast)


Angehängte Dateien:

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

von Rolf M. (rmagnus)


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.

von Martin (Gast)


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

von Sid (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.