Seite 1 von 1

[gelöst]Deklaration von Items in Schleifen

Verfasst: 2. Dezember 2007 00:18
von qtNiko
hi,

ich möchte in einer Schleife jeweils ein neues Bild einlesen, etwas darüber malen und alles zusammen in einem Label darstellen.
Wenn ich also schreibe:

Code: Alles auswählen

for (i=1; i<maxLoop; i++) {
         QPainter painter(&bild);  // bild wurde außerhalb der Schleife von Datei gelesen
		painter.drawLine(10,10,200,200);  // nur als Beispiel
		painter.end();             // nötig, weil sonst setPixmap() nicht geht
		myLabel->setPixmap(bild);  // anzeigen
}
dann müsste doch bei jedem Schleifendurchlauf ein neues Objekt QPainter erzeugt werden. Dann hätte ich am Ende jede Menge QPainter, die alle gleich heißen, oder nicht?

Zweites Beispiel:
Eine Textdatei soll zeilenweise eingelesen werden. Die Datei file ist geöffnet, und jetzt:

Code: Alles auswählen

QTextStream in(&file);
     while (!in.atEnd()) {
         QString line = in.readLine();
         process_line(line);
     }
Dieses Beispiel stammt aus der Doku. Hier müsste doch ebenfalls für jede Zeile der Datei ein neues Objekt "line" erzeugt werden, oder?

Verfasst: 2. Dezember 2007 00:22
von upsala
Wann wolltest du dir nochmal C++-Grundlagen aneignen?

Verfasst: 2. Dezember 2007 12:03
von iaby
Beim Verlassen des Gültigkeitsbereichs

Code: Alles auswählen

{
   ...
}
werden die Variablen (wenn sie wie hier auf dem Stack liegen) wieder zerstört. Es gibt also immer nur eine Variable, auf die kannst du dann auch nach der Schleife nicht mehr zugreifen!

Verfasst: 2. Dezember 2007 17:41
von ObeliX
.. und dieser gültigkeitsbereich wird bei jedem schleifendurchlauf verlassen und dann der ganze anweisungsblock ggf. erneut ausgeführt.


MfG Obel

Verfasst: 2. Dezember 2007 20:51
von qtNiko
danke,

der Hinweis auf den Gültigkeitsbereich {..} ist sehr viel hilfreicher, als die Frage nach C++ Grundkenntnissen.
Ich war davon ausgegangen, dass der Gültigkeitsbereich die komplette function ist.
Nun, ich habe wieder etwas dazugelernt, vor allem auch im Hinblick auf Zeitoptimierungen. Denn wenn in einer langen Schleife viele solche Variablen/Objekte immer wieder erzeugt und gelöscht werden, dann kann sich dies ganz schön im Zeitverhalten auswirken.