[gelöst] Runtime Error
-
Hallo,
ich habe folgenden Code um eine Datei zeilenweise einzulesen und die Daten an eine ListView zu übergeben:
cardList.clear(); QFile cardFile(":/dateien/standard.txt"); if (!cardFile.open(QIODevice::ReadOnly)) { QMessageBox::information(0, "Error opening file", cardFile.errorString()); } else { while(!cardFile.atEnd()) { QString line = cardFile.readLine(); cardList.append(line); } cardFile.close(); } // Populate our model cardViewModel->setStringList(cardList); // Glue model and view together ui->cardView->setModel(cardViewModel); ui->cardView->setEditTriggers(QAbstractItemView::NoEditTriggers);
Wenn ich nun die Line noch splitten möchte, stürzt das Programm mit folgendem Fehler ab:
ASSERT failure in QList<T>::operator[]: "index out of range", file ..\..\QT5.5.0\5.5\mingw492_32\include/QtCore/qlist.h, line 518
cardList.clear(); QFile cardFile(":/dateien/standard.txt"); if (!cardFile.open(QIODevice::ReadOnly)) { QMessageBox::information(0, "Error opening file", cardFile.errorString()); } else { while(!cardFile.atEnd()) { QString line = cardFile.readLine(); QStringList l = line.split("#"); cardList.append(l[1]); } cardFile.close(); } // Populate our model cardViewModel->setStringList(cardList); // Glue model and view together ui->cardView->setModel(cardViewModel); ui->cardView->setEditTriggers(QAbstractItemView::NoEditTriggers);
Außerdem sind zwischen den Zeilen leerzeilen zu erkennn, die im textfile nicht da sind.
Wenn ich die daten mit einer for schleife einfach zahlen einfüge sind diese auch nicht da.
-
Du solltest prüfen ob l auch 2 Elemente besitzt bevor du drauf zugreifst.
// Zeile 13 if (l.size() > 0 ) // bzw. in deinen Fall > 1, weil du auf das 2. Element zugreifst. l.size() oder l.lenght() weiß ich jetzt nicht genau. { cardList.append(l[1]); }
Guck dir deine Datei mal mit einen Hex-Editor oder ähnlich an.