Konstruktorenunterschiede

Alles rund um die Programmierung mit Qt
Antworten
moechild

Konstruktorenunterschiede

Beitrag von moechild »

Habe allgemeine Frage:

Ich finde 2 Arten von Konstruktoren in Qt;
die Einen wie das Beispiel von QApplication,

Code: Alles auswählen

QApplication  application( int & argc, char ** argv )
und die Anderen wie das Beispiel von QLabel.

Code: Alles auswählen

QLabel *label = new QLabel( *parent, 0, 0 )
Was unterscheidet sie und wie kann ich sie unterscheiden, da ich öfters Fehler beim Konstruktor gemacht habe. Aber in der Doku gibt es keine Unterscheidung. So sieht z.B. die Doku von QApplication so aus

Code: Alles auswählen

QApplication::QApplication ( int & argc, char ** argv )
und die von QLabel so aus

Code: Alles auswählen

QLabel::QLabel ( QWidget * parent, const char * name = 0, WFlags f = 0 )
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Das sind C++-Grundlagen und hat (fast) nichts mit Qt zu tun. Mit dem einzigen Unterschied, daß QObject-Klassen die einen parent haben, nur im Heap angelegt werden sollten, da sie ja im Allgemeinen von der Parent-Klasse zerstört werden.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Konstruktorenunterschiede

Beitrag von franzf »

moechild hat geschrieben:Ich finde 2 Arten von Konstruktoren in Qt;
die Einen wie das Beispiel von QApplication,

Code: Alles auswählen

QApplication  application( int & argc, char ** argv )
und die Anderen wie das Beispiel von QLabel.

Code: Alles auswählen

QLabel *label = new QLabel( *parent, 0, 0 )
Beim zweiten wird ein Zeiger verwendet (QLabel *), für das du beim Erzeugen neuen Speicher (new) anfordern musst. Dafür wird im Speicher ein neues Objekt angelegt und dessen Adresse an label zugewiesen (*label stellt dann das eigentliche Objekt dar).
Im ersten Fall instantiierst du direkt ein Objekt und du arbeitest ohne Zeiger auf das Objekt.

Folgende Anweisungen sind deshalb identisch:

Code: Alles auswählen

// erst ein Objekt dynamisch anlegen:
QLabel *label;
label = new QLabel( "Testtext" );
QString txt;
// jetzt die beiden identischen Anweisungen:
txt = label->text();
txt = (*label).text();
Der Konstruktor, wie du ihn in der Doku siehst, zeigt dir nur, wie du die Parameter angeben musst, um dein Objekt zu instantiieren. Vom Aussehen her sind die deshalb recht ähnlich (Tschuldigung für diese laienhafte Darstellung ;)).

Aber das sind alles C++-Sachen, hat also gar nix mit Qt zu tun. Kannst dir da ja mal was nettes im Internet suchen (wenn du Englisch magst: Thinking in C++).

Grüße
Franz
moechild

Beitrag von moechild »

Vielen Dank für die Antworten, jetzt verstehe ich Qt ein bisschen besser.

Ich kann zwar C++, aber leider noch nicht so perfekt. Vieles kann man nur beim richtigen Programmieren verstehen.

So wie du es mir erklärt hast, hab ichs begriffen.

Danke!

:lol:
Antworten