Seite 1 von 1

[geloest, danke]Qt Example: Was macht this->pen = pen;

Verfasst: 23. Juni 2008 16:17
von joebar
Hallo,

ich beziehe mich auf http://doc.trolltech.com/4.2/painting-basicdrawing.html

Dort gibt es diverse Funktionen der Art:

Code: Alles auswählen

 void RenderArea::setPen(const QPen &pen)  {
     this->pen = pen; // diese Zeile 
     update();
 }

In RenderArea.h gibt es eine private Deklarierung QPen pen;

Was macht die Zeile "this -> ...". "this" bezieht sich doch auf die aktuelle Instanz von RenderArea, dort rufe ich die "funktion" pen auf? pen ist ein Objekt und keine Funktion.

Danke.

Verfasst: 23. Juni 2008 17:19
von PeterLustig
this bezieht sich auf die aktuelle Instanz von RenderArea, das ist richtig. Aber wie kommst du darauf das "pen" eine Funktion ist?
http://doc.trolltech.com/4.2/painting-b ... rea-h.html
Dort kannst du sehen das Pen einfach ein QPen von RenderArea ist. Und dieses Pen-Objekt überschreibst du jetzt mit dem in der Funktion übermittelten neuen Pen.

Verfasst: 24. Juni 2008 11:09
von joebar
Eben pen ist ein Objekt, Funktion war in "" geschrieben und danach stand doch auch "pen ist ein Objekt und keine Funktion".

Wo ich das Problem habe ist, dass ich die Funktion aufrufe mit einem Argument welches pen heisst, gleichzeitig nutze ich in der Funktion meine Klassenvariable pen. Sprich ich habe zwei verschiedene Objekte die beide pen heissen. Wenn ich "this-> pen = pen" mal anders schreiben darf als "this -> pen1 = pen2" waere pen1 das pen aus der Klasse und das pen2 das was ich der Funktion uebergebe, oder? Woher weiss mein compiler das?

Danke!

Verfasst: 24. Juni 2008 14:06
von PeterLustig
Es "gewinnt" immer das "nähere" Objekt. Pen als Argument wird direkt übergeben, also ist pen am nächsten. Du kannst aber auch direkt auf das "weiter entfernte" pen zugreifen, nämlich die Member Variable von "this".
this->pen = Die Membervariable pen von "this".
pen = Das lokale Pen Objekt (also das Argument, gibt es das Argument nicht oder wäre anders benannt, wäre auch dies gleich this->pen). Dies ist angemerkt schlechter Stil, die Bezeichnungen sollten sich schon unterscheiden. ;)