Seite 1 von 1

Konstruktorenunterschiede

Verfasst: 7. Januar 2007 10:31
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 )

Verfasst: 7. Januar 2007 12:07
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.

Re: Konstruktorenunterschiede

Verfasst: 7. Januar 2007 12:18
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

Verfasst: 7. Januar 2007 18:57
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: