Also ich gehe mal davon aus dass du jeweils eine Zeile in ein lineedit schreiben willst?
Also wenn ich mich nicht irre sind da ein paar üble Fallen in deinem Code.
Zum einen ist es i.A. sehr hässlich zwei Anweisungen am Ende der for Zeile zu haben (wie heisst diese Stelle eigentlich??), also ich meine das hier:
Code:
for(int i=0; datei.get(c); i++, ptrlineEdit = lineEditList.next()){
Das wäre so m.E. besser, z.B. leichter zu debuggen:
Code:
for(int i=0; datei.get(c); i++){
[...] // dein Code
ptrlineEdit = lineEditList.next();
}
In der for Zeile sollte man meistens nur den eigentlichen Iterator erhöhen, sonst kommt man schnell durcheinander.
Damit sieht man jetzt vor allem ein Problem:
Du liest die Datei Zeichen für Zeichen aus, nach jedem Zeichen wird ptrlineEdit auf das nächste Element in der Liste gesetzt. Du hast 10 Zeilen mit jeweils 3 Zeichen (zweistellige Zahl + \n), du brauchst also mindestens 30 lineedits damit das funktioniert.
Ich denke du solltest hier ausserdem besser die Qt Klassen für das Einlesen der Datei benutzen. Die sind schlicht und ergreifend intuitiver zu benutzen und sehr viel komfortabler. Das sähe hier dann so aus (ungetesteter Code!!)
Code:
QPtrList<QLineEdit> lineEditList;
lineEditList.append(m_lineEdit1);
lineEditList.append(m_lineEdit2);
...
QFile file("/Users/HL/Desktop/noten.txt");
if (!file.open(IO_ReadOnly)) {
printf("Konnte Datei %s nicht öffnen\n", file.name());
}
QStringList lines;
while (!file.atEnd()) {
char buffer[255];
file.readLine(buffer, 255);
lines.append(QString(buffer));
}
for (int i = 0; i < lineEditList.count(); i++) {
if (i >= lines.count()) {
printf("Datei hatte weniger Zeilen als erwartet!\n");
break;
}
QLineEdit* edit = lineEditList.at(i); // kann nie NULL sein, da i >= 0 und i < lineEditList.count(). Ansonsten sollte man jetzt auf NULL überprüfen
edit->setText(lines[i]);
}
Dieser Code liest also erst die gesamte Datei (zeilenweise) ein und setzt die Zeilen in eine QStringList. Mit dieser lässt es sich jetzt komfortabel arbeiten, was in der darauffolgenden Schleife geschieht.
Insbesondere hängt die Anzahl der Durchläufe der 2. Schleife vor allem von der Anzahl der lineedits in deinem Programm ab, nicht nur von der Zahl der Zeichen (Zeilen, etc.) in der Datei (was zu einem Crash wegen NULL pointer führen würde).
CU
Andi
Lesezeichen