Seite 1 von 1

Probleme mit QLayoutItem

Verfasst: 25. April 2012 17:19
von stom
Liebe QT Communitie

Ich arbeite jetzt seit drei Wochen mit der QT Libary, also ich bin noch ein QT Neuling. Bis jetzt konnte ich eigentlich alle Probleme mit der QT Docu und diesem Forum lösen. Mein jetztiges Problem konnte ich bis jetzt nicht lösen.

Ich habe mehrer Checkboxen in eine GroupBox zusammen gefügt. Diese GroupBox habe ich dann in ein Gridlayout zusammen gefügt. Ich möchte nun auf die einzelnen Widget mit dem Befehl

Code: Alles auswählen

grid->itemAt(grid->count());
zugreifen.

Nur wenn ich QLayoutItem Initalisieren möchte

Code: Alles auswählen


	 QLayoutItem Item;
	 Item = new QLayoutItem();

kommt dieser Fehler

1>.\Annotation_window.cpp(19) : error C2259: 'QLayoutItem' : cannot instantiate abstract class
1> due to following members:
1> 'QSize QLayoutItem::sizeHint(void) const' : is abstract
1> c:\qt\4.8.1\include\qtgui\../../src/gui/kernel/qlayoutitem.h(69) : see declaration of 'QLayoutItem::sizeHint'
1> 'QSize QLayoutItem::minimumSize(void) const' : is abstract
1> c:\qt\4.8.1\include\qtgui\../../src/gui/kernel/qlayoutitem.h(70) : see declaration of 'QLayoutItem::minimumSize'
1> 'QSize QLayoutItem::maximumSize(void) const' : is abstract
1> c:\qt\4.8.1\include\qtgui\../../src/gui/kernel/qlayoutitem.h(71) : see declaration of 'QLayoutItem::maximumSize'
1> 'Qt::Orientations QLayoutItem::expandingDirections(void) const' : is abstract
1> c:\qt\4.8.1\include\qtgui\../../src/gui/kernel/qlayoutitem.h(72) : see declaration of 'QLayoutItem::expandingDirections'
1> 'void QLayoutItem::setGeometry(const QRect &)' : is abstract
1> c:\qt\4.8.1\include\qtgui\../../src/gui/kernel/qlayoutitem.h(73) : see declaration of 'QLayoutItem::setGeometry'
1> 'QRect QLayoutItem::geometry(void) const' : is abstract
1> c:\qt\4.8.1\include\qtgui\../../src/gui/kernel/qlayoutitem.h(74) : see declaration of 'QLayoutItem::geometry'
1> 'bool QLayoutItem::isEmpty(void) const' : is abstract
1> c:\qt\4.8.1\include\qtgui\../../src/gui/kernel/qlayoutitem.h(75) : see declaration of 'QLayoutItem::isEmpty'

Ich verwende den Compiler von Visual Studio C++ Express 2008.

Danke für eure Hilfe im Vorraus
Mit freundlichen
Stom

Re: Probleme mit QLayoutItem

Verfasst: 25. April 2012 18:03
von Christian81
QLayoutItem ist eine abstrakte Basisklasse - die kann man (wie dir der Compiler ja auch korrekt sagt) nicht direkt instanziieren.
Abgesehen davon weiß ich nicht was das mit deinem eigentlichen Problem zu tun haben sollte - die Funktion itemAt() gibt Dir doch schon ein Pointer auf ein LayoutItem zurück - warum also ein neues erstellen??

Re: Probleme mit QLayoutItem

Verfasst: 25. April 2012 18:09
von stom
Erstmal Danke für die schnelle Antwort.

Okay das mit der abstrakte Basisklasse hab ich nicht gewusst -> sry für meine schlechten c++ kenntnisse :)

Ich möchte den Pointer den ich zurück bekomme speichern, um das Item, worauf der Pointer zeigt zu löschen.

Re: Probleme mit QLayoutItem

Verfasst: 25. April 2012 18:42
von Christian81
Und wo genau ist jetzt das Problem? Du bekommst einen Pointer auf QLayoutItem zurück und damit kommst Du auf das zugehörige Widget (siehe Doku)
Aber warum ein Widget auf diese komische Art und Weise löschen?

Re: Probleme mit QLayoutItem

Verfasst: 25. April 2012 18:54
von stom
Ja du hattest recht, er gibt mir einen pointer zurueck. DANKE

Code: Alles auswählen

QWidget* buf;
buf = new QWidget();
buf = grid->itemAt(grid->count()-1)->widget();
delete buf


Warum ich die Widget so löschen will -> ich habe 4 checkboxen in einem Gridlayout und möchte beim "aktivieren" einer checkbox, dass zusätzliche checkboxen generiert werden. wenn ich die checkbox "deaktiviere" möchte ich die generierten checkboxen wieder löschen.

Re: Probleme mit QLayoutItem

Verfasst: 25. April 2012 19:35
von Christian81
Und warum legst Du erst ein neues QWidget mit new an und überschreibst dann den Pointer direkt wieder? Damit hast Du ein schönes Memory-Leak geschaffen... Mir scheint hier fehlen ein paar wesentliche C++ Grundlagen.

Re: Probleme mit QLayoutItem

Verfasst: 26. April 2012 09:21
von stom
Ja ist mir auch auf gefallen, habs schon geändert. aber du hast recht meine c++ grundlagen sind nicht die aller besten, ist schon ein zeiterl her das ich c++ programmiert habe. aber danke für deine schnelle hilfe