Klassen/Objekte Organisation mit OpenGL
-
Illuminatus
- Beiträge: 84
- Registriert: 3. Dezember 2008 12:48
Klassen/Objekte Organisation mit OpenGL
Hi
ich habe eine Oberflächenklasse die als Membervariablen ein von QGLWidget abgeleitete Klasse enthält und eine Liste von Objekten. Ich möchte nun, dass wenn diese Liste gefüllt ist, durch irgendeine Interaktion diese Objekte ausgelesen werden und von dem OpenGL Widget ausgelesen werden. Meine Frage ist nun, wenn ich die Bearbeitung des Objektes in die OpenGL Klasse stecke, dies bereits zu Beginn der Laufzeit (also wenn die Liste noch leer ist) geschieht, und wie ich erreichen kann, dass das OpenGL Fenster erst zu meiner Interaktion gerendert wird? (zu Beginn des Programms ist es das centralWidget meiner Oberfläche....
thx =)
ich habe eine Oberflächenklasse die als Membervariablen ein von QGLWidget abgeleitete Klasse enthält und eine Liste von Objekten. Ich möchte nun, dass wenn diese Liste gefüllt ist, durch irgendeine Interaktion diese Objekte ausgelesen werden und von dem OpenGL Widget ausgelesen werden. Meine Frage ist nun, wenn ich die Bearbeitung des Objektes in die OpenGL Klasse stecke, dies bereits zu Beginn der Laufzeit (also wenn die Liste noch leer ist) geschieht, und wie ich erreichen kann, dass das OpenGL Fenster erst zu meiner Interaktion gerendert wird? (zu Beginn des Programms ist es das centralWidget meiner Oberfläche....
thx =)
Gehe ich recht in der Annahme Du willst eine Aktion starten wenn Du das erstemal etwas in die Liste einfügst? Wenn ja dann sollte Dir das Signal & Slot Framework helfen.
Gut Schuß
VuuRWerK
Gut Schuß
VuuRWerK
Es gibt nur 3 natürliche Feinde des Programmierers: Tageslicht, frische Luft und das unerträgliche Gebrüll der Vögel.
Oft ist die Ursache des schwarzsehens lediglich ein verrutschen des Bretts vorm Kopf =)
Oft ist die Ursache des schwarzsehens lediglich ein verrutschen des Bretts vorm Kopf =)
-
Illuminatus
- Beiträge: 84
- Registriert: 3. Dezember 2008 12:48
hi das signal slot is nich das problem! mein problem is die konstruktion mit dem QGL Widget! ich habe eine von einer GLWIdget abgeleitete klasse! und mir gehts darum! beim konsturktor der oberfläche hab ich eben die *anzeige=obengldrawer(this); und diese oberfläche besteht noch aus steuerelementen! und ich möchte nachdem ich eine interaktion "fertig habe", dass das opengl fenster neu gezeichnet wird! also der code in der draw() die abhängt von der oberflächen-internen-liste neu berechnet und dargestellt wird!
lg
illu
lg
illu
Entweder drückst Du Dich falsch aus oder aber ich verstehe Dein problem nicht aber so wie Du es hier beschreibst klingt es immernoch nach dem Signal & Slot.
Gut Schuß
VuuRWerK
Gut Schuß
VuuRWerK
Es gibt nur 3 natürliche Feinde des Programmierers: Tageslicht, frische Luft und das unerträgliche Gebrüll der Vögel.
Oft ist die Ursache des schwarzsehens lediglich ein verrutschen des Bretts vorm Kopf =)
Oft ist die Ursache des schwarzsehens lediglich ein verrutschen des Bretts vorm Kopf =)
-
Illuminatus
- Beiträge: 84
- Registriert: 3. Dezember 2008 12:48
hi also hab im assi nochma nachgeschaut, und ich hab mich wirklich doof ausgedrückt ! mir gehts darum, ich will den slot updateGL() aufrufen meines widgets opengldrawer!
ich weis dass ich signal und slots verknüpfe mit QObject::connect();
wie mach ich das nun?
ich habe eine größere methode die schon als slot ausgeführt wird und ich möchte dass am ende der methode (also wenn die liste gefüllt wurde) der slot aufgerufen wird?
muss ichu nun ein signal definieren dass als methode in meiner methode ausgeführt wird, und welches ich mit dem in QGLWidget definierten slot verbinde?
ich weis dass ich signal und slots verknüpfe mit QObject::connect();
wie mach ich das nun?
ich habe eine größere methode die schon als slot ausgeführt wird und ich möchte dass am ende der methode (also wenn die liste gefüllt wurde) der slot aufgerufen wird?
muss ichu nun ein signal definieren dass als methode in meiner methode ausgeführt wird, und welches ich mit dem in QGLWidget definierten slot verbinde?
Genau, erstelle ein Signal welches Du am Ende Deiner Arbeiten emittest und verbindest dieses Signal mit dem QGLWidget#updateGL().
Gut Schuß
VuuRWerK
Gut Schuß
VuuRWerK
Es gibt nur 3 natürliche Feinde des Programmierers: Tageslicht, frische Luft und das unerträgliche Gebrüll der Vögel.
Oft ist die Ursache des schwarzsehens lediglich ein verrutschen des Bretts vorm Kopf =)
Oft ist die Ursache des schwarzsehens lediglich ein verrutschen des Bretts vorm Kopf =)
-
Illuminatus
- Beiträge: 84
- Registriert: 3. Dezember 2008 12:48
hi also ich glaub ich habs zu umständlich formuliert^^
mein problem is folgendes:
ich habe eine hauptklasse, in der die meiste interaktion stattfindet! sie ist von QMainWIndow abgeleitet und stellt somit die GUI dar. Sie besitzt desweiteren ein privates Objekt vom Typ QList<tupel>.
Als CentralWidget hat sie die klasse opengldrawer die von QGLWidget abgeleitet ist. Ich habe nun per SIgnalSlot es so eingerichtet ist, dass wenn durch meine Interaktion diese Liste gefüllt wurde der Slot updateGL() dieser Klasse aufgerufen wird. Ich möchte dann in der draw() Funktion dass diese Punkte aus meiner in der oben genannten Klasse definierten Liste ausgelesen werden. Ich habe versucht per
in der header der QGLWidget Klasse bkannt zu machen, das schlägt aber beim Linken fehl.
ich hab null plan wie das zu lösen sein könnte..
mein problem is folgendes:
ich habe eine hauptklasse, in der die meiste interaktion stattfindet! sie ist von QMainWIndow abgeleitet und stellt somit die GUI dar. Sie besitzt desweiteren ein privates Objekt vom Typ QList<tupel>.
Als CentralWidget hat sie die klasse opengldrawer die von QGLWidget abgeleitet ist. Ich habe nun per SIgnalSlot es so eingerichtet ist, dass wenn durch meine Interaktion diese Liste gefüllt wurde der Slot updateGL() dieser Klasse aufgerufen wird. Ich möchte dann in der draw() Funktion dass diese Punkte aus meiner in der oben genannten Klasse definierten Liste ausgelesen werden. Ich habe versucht per
Code: Alles auswählen
extern QList<tupel> objekte
ich hab null plan wie das zu lösen sein könnte..
Zuletzt geändert von Illuminatus am 26. Februar 2009 12:08, insgesamt 1-mal geändert.
-
Illuminatus
- Beiträge: 84
- Registriert: 3. Dezember 2008 12:48
-
Illuminatus
- Beiträge: 84
- Registriert: 3. Dezember 2008 12:48
Wie übergeb ich die Liste mit??? dazu muss der SLOT diese doch auch entgegennehmen oder? und der updateGL() erwartet doch keine parameter?CLRS530 hat geschrieben:Dann musst du deine Struktur überdenken. Entweder packst du die Liste woanders hin und fügst z.B. einzelne Elemente mit add als funktion der Klasse hinzu oder aber, wenn das Signal von MainWindow gesetzt wird, kannst du die Liste doch einfach mit übergeben.
Bei langen Listen ist das sicherlich kein so gutes Vorgehen, da die Parameter des SIGNALS komplett kopiert werden (Auch wenn die SIGNAL-Parameter mit ner Referenz definiert sind, AFAIK). Mit großen Objekte kostet das Zeit und Speicher.CLRS530 hat geschrieben:wenn das Signal von MainWindow gesetzt wird, kannst du die Liste doch einfach mit übergeben.
Prinzipiell geht sowas mit extern schon. Aber so weit ich weiß ist die Liste ein Member einer anderen Klasse. Da ist das mit extern nicht lösen.
Warum gibst du nicht das Objekt, welches die tupel-Liste als Member hat, deiner Klasse als Member, die dann auf die Elemente zugreifen will, als Pointer/Referenz? Damit kannst du jederzeit auf die Daten zugreifen, ohne kopieren zu müssen.
Code: Alles auswählen
class opengldrawer : public QGLWidget
{
Q_OBJECT
public:
opengldrawer(dbvis* db);
protected:
dbvis* m_dbvis;
};-
Illuminatus
- Beiträge: 84
- Registriert: 3. Dezember 2008 12:48