QGLWidget zeichnet nichts

Verschiedenes zu Qt
Antworten
FreakyBKA
Beiträge: 26
Registriert: 3. März 2008 09:57

QGLWidget zeichnet nichts

Beitrag von FreakyBKA »

Hallo,
also ich habe ein Problem mit dem QGLWidget, ich habe wie in der Doku angegeben die paintGL, resizeGL und initializeGL überladen und dort quasi reingeschrieben was ich sonst bei glutDisplayFunc, glutReshapeFunc mache und sonstige Initialisierungen in die initializeGL.
ich habe also ein Klasse

Code: Alles auswählen

class GLWidget : public class QGLWidget
{
//...
}
mit den als protected überladenen Funktionen.
in meinem Hauptfenster habe ich dann ein Objekt der Klasse GLWidget

Code: Alles auswählen

class frm_main : public QMainWindow, protected Ui_frm_main
{
	Q_OBJECT
	public:
		GLWidget *glWidget;
//...
}
in dieser Klasse erzeuge ich dann mittels

Code: Alles auswählen

//...
glWidget = new GLWidget(this);
//...
eine neues Objekt der Klasse, die mir meine OpenGL-Grafiken zeigen soll, jedoch tut sie das nicht. Muss man da noch zusätzlich irgendwas einstellen dass das auch gezeichnet wird?
Mausinteraktionen mit dem glWidget funktionieren auch nicht obwohl ich sie definiert habe, ich wollte mir nur die Mausposition ausgeben lassen aber es kommt nie zu dem MousePressEvent o.ä.
Achso ein weiteres Problem nebenbei ist noch, dass obwohl ich bei dem Hauptfenster MouseTracking auf true gestellt habe, wird das MouseMoveEvent nur beim Klicken ausgelöst, das versteh ich auch nicht genaz warum das so ist, sollte ja eigentlich dann immer ausgelöst werden wenn die Maus bewegt wird.
Besten Dank schon mal im Voraus
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Zu wenig code - wo zeigst Du das Widget an usw.?
Beispiele schonmal angeschaut?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Volker
Beiträge: 343
Registriert: 30. Juni 2005 05:27

Beitrag von Volker »

Bin mir nicht sicher, aber ich glaube das Maustracking bezieht sich immer nur auf das Fenster auf dem es gesetzt ist und nicht auch auf die Widgets die darin enthalten sind. D.h. Maustracking nicht für das MainWidget setzen sondern für das QGLWidget.
An sonsten kann's für ein leeren OpenGL Viewport viele Gründe haben. Wie Christian schon gesagt hat, aus dem angegebenen Code herauszufinden warum's nicht geht, ist schwierig.
Bitte seid so nett und ändert den Titel von Beiträgen die gelöst wurden, auf [gelöst] Beitragstitel
FreakyBKA
Beiträge: 26
Registriert: 3. März 2008 09:57

Beitrag von FreakyBKA »

also das beispiel aus der doc von Qt zu QGLWidget hilft mir da nicht, weil da diesbzgl nichts hilfreiches drinsteht.
das widget wird im hauptfenster angezeigt

Code: Alles auswählen

	glWidget = new GLWidget(this);
	glWidget->setGeometry(QRect(0, 20, 844, 570));
	glWidget->setMouseTracking(true);
	glWidget->setEnabled(true);
	glWidget->show();
und das zeichnen läuft über einen timer der regelmäßig updateGL aufruft.

Code: Alles auswählen

	QObject::connect(timer, SIGNAL(timeout()), glWidget, SLOT(updateGL()));
als beispiel zum zeichnen hab ich zB

Code: Alles auswählen

void paintGL()
{
	glBegin(GL_LINE_STRIP);
		glColor3f(1,0,0);
		glVertex3f(0,0,1);
		glVertex3f(1,0,1);
		glVertex3f(1,1,1);
		glVertex3f(0,1,1);
		glVertex3f(0,0,1);
	glEnd();
}
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

QGlWiget ist immernoch ein QWidget und man kann auch hier nur in paintEvent() zeichnen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
FreakyBKA
Beiträge: 26
Registriert: 3. März 2008 09:57

Beitrag von FreakyBKA »

was ist dann der Sinn von paintGL? oder muss ich dann einfach im paintEvent updateGL auslösen? und wie kann ich in meinem timer dann das paintEvent auslösen?
ich hab übrigens auch für die GLWidget das mousetracking angeschaltet, geht aber trotzdem nur für das hauptfenster und auch nur bei mausklicks.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

ok - mein Fehler. updateGL() ist korrekt (entspricht paintEvent() von QWdiget). Nur das Du es von Hand aufrufst nicht.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
FreakyBKA
Beiträge: 26
Registriert: 3. März 2008 09:57

Beitrag von FreakyBKA »

dafür ist doch das updateGL da, das man es auch von Hand bzw wenn es halt von Nöten ist aufrufen kann.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Zeig mal den kompletten Code...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
FreakyBKA
Beiträge: 26
Registriert: 3. März 2008 09:57

Beitrag von FreakyBKA »

so habs jetzt hinbekommen, war natürlich ein fehler meinerseits. hab das QGLWidget zu früh in die klasse des hauptfensters mit eingebunden, sodass da wahrscheinlich noch ein paar initialisierungen nicht abgearbeitet waren.
danke trotzdem.
Antworten