'ein' Widget in 2 Layouts
Verfasst: 30. Januar 2008 07:31
Hallo,
Ich programmiere mit Qt noch nicht lange, um genau zu sein ist es mein erstes Project, und ich stehe nun vor einem Problem bei dem ich einfach nicht weiter komme.
Ich schreibe eine Anwendung mit der man sich 3-dimensionale Objekte anschauen kann und habe dafür 4 QtOpenGL-Widgets für jeweils unterschiedliche ansichten. Ich möchte, dass man sich jedes Fenster einzeln anschauen kann, um eine größere Übersicht zu haben aber auch alle 4 gleichzeitig nebeneinander ( bzw. 2 Reihen à 2 Widgets ).
Gelöst(versucht) habe ich das ganze bisher mit QStackedLayout mit welchem ich durch die Einzelansichten und die 4er Ansicht switchen kann. Die 4er Ansicht ist mit einem QGridLayout realisiert.
Zur erläuterung des Problemes: Da ich anscheinend kein Widget gleichzeitig in 2 Layouts implementiert haben kann muss ich die Widgets um zwischen Einzel- und 4er-Ansicht wechseln zu können wohl aus dem vorher aktivierten Layout Entfernen. Generell startet die Anwendung mit der 4er-Ansicht wodurch folgendes zu Beginn geladen wird (klappt soweit auch):
xyt-, xz-, yz- und xybWidget sind die einzelnen QtOpenGL-Widgets. allLayout ist dementsprechend das QGridLayout, desktopLayout das QStackedLayout ( viewAllWidget somit zum Index 0). (( desktopLayout hat hier einen count() von 1, passt ))
Wechsel ich nun zu einer Einzelansicht gebe ich die Widgets „frei“ und füge sie dem StackedLayout ein
Klappt soweit wunderbar, ich kann nun durch die Einzelansichten ohne Probleme switchen (( desktopLayout hat hier einen count() von 5, passt )).
Will ich nun wieder in die 4er Ansicht muss ich wieder removen und einfügen:
Hier das Problem: Nach dem “Freigeben”(remove) der Widgets aus dem StackedLayout hat dieses noch einen count() von 1, was passt, ergo die Widgets sind freigegeben. Allerdings bekomme ich sie nicht mehr in die 4er Ansicht (desktopLayout) eingebunden, er zeigt sie mir dort einfach nie wieder an.
Vielleicht seht ihr ja meinen Fehler und denkt euch „ouch“ oder könnt mir mit einer anderen Lösung helfen, ich wäre zumindest sehr dankbar...
Noci
Ich programmiere mit Qt noch nicht lange, um genau zu sein ist es mein erstes Project, und ich stehe nun vor einem Problem bei dem ich einfach nicht weiter komme.
Ich schreibe eine Anwendung mit der man sich 3-dimensionale Objekte anschauen kann und habe dafür 4 QtOpenGL-Widgets für jeweils unterschiedliche ansichten. Ich möchte, dass man sich jedes Fenster einzeln anschauen kann, um eine größere Übersicht zu haben aber auch alle 4 gleichzeitig nebeneinander ( bzw. 2 Reihen à 2 Widgets ).
Gelöst(versucht) habe ich das ganze bisher mit QStackedLayout mit welchem ich durch die Einzelansichten und die 4er Ansicht switchen kann. Die 4er Ansicht ist mit einem QGridLayout realisiert.
Zur erläuterung des Problemes: Da ich anscheinend kein Widget gleichzeitig in 2 Layouts implementiert haben kann muss ich die Widgets um zwischen Einzel- und 4er-Ansicht wechseln zu können wohl aus dem vorher aktivierten Layout Entfernen. Generell startet die Anwendung mit der 4er-Ansicht wodurch folgendes zu Beginn geladen wird (klappt soweit auch):
Code: Alles auswählen
viewAllLayout->addWidget( xytWidget, 0, 0 );
viewAllLayout->addWidget( xzWidget, 0, 1 );
viewAllLayout->addWidget( yzWidget 1, 0 );
viewAllLayout->addWidget( xybWidget, 1, 1 );
viewAllWidget->setLayout( viewAllLayout );
desktopLayout->addWidget( viewAllWidget );
setCentralWidget( desktop );Wechsel ich nun zu einer Einzelansicht gebe ich die Widgets „frei“ und füge sie dem StackedLayout ein
Code: Alles auswählen
viewAllLayout->removeWidget( xytWidget );
viewAllLayout->removeWidget( xzWidget );
viewAllLayout->removeWidget( yzWidget );
viewAllLayout->removeWidget( xybWidget );
desktopLayout->insertWidget( 1, xytWidget );
desktopLayout->insertWidget( 2, xzWidget );
desktopLayout->insertWidget( 3, yzWidget );
desktopLayout->insertWidget( 4, xybWidget );Will ich nun wieder in die 4er Ansicht muss ich wieder removen und einfügen:
Code: Alles auswählen
desktopLayout->removeWidget( xytWidget );
desktopLayout->removeWidget( xzWidget );
desktopLayout->removeWidget( yzWidget );
desktopLayout->removeWidget( xybWidget );
viewAllLayout->addWidget( xytWidget, 0, 0 );
viewAllLayout->addWidget( xzWidget, 0, 1 );
viewAllLayout->addWidget( yzWidget, 1, 0 );
viewAllLayout->addWidget( xybWidget, 1, 1 );Vielleicht seht ihr ja meinen Fehler und denkt euch „ouch“ oder könnt mir mit einer anderen Lösung helfen, ich wäre zumindest sehr dankbar...
Noci