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
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.