www.mikrocontroller.net

Forum: PC-Programmierung Qt - VowelCube 3D openGL


Autor: Martin (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

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

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

Autor: Rolf Magnus (rmagnus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Diese Meldung bekomme ich nicht. Dafür kommt:
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.

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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=PA...

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

Autor: Sid (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
QGL::setPreferredPaintEngine(QPaintEngine::OpenGL);

damit wird OpenGL für alle Zeichenaufgaben genutzt.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.