Hallo,
ich hab ein Problem beim Abspeichern der Tabelle in eine Datei und danach wieder Auslesen der Tabelle. Vielleich können Sie mir helfen. Ich bekomme nur eine Zeile zurück, obwohl rowCount() und columnCount() mir die richtige Ergebnisse liefern.
void MainWindow::tSaveDemoHandler() {
fileName = ui.tFilename->text();
if (fileName.isEmpty()) {
ui.tErrorlabel->setText("<font color=red>No file Name specified</font>");
return;
}
if (!fileName.contains(".txt")) {
fileName.append(".txt");
}
fileName.insert(0, "demo/");
QFile file(fileName);
if(file.exists()){
file.remove();
}
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
ui.tErrorlabel->setText(
"<font color=red>The file couldn't be open.\nPlease try again.</font>");
return;
}
QDataStream out(&file);
int max_row = ui.tableWidget->rowCount(); //seltsames Verhalten
int max_column = ui.tableWidget->columnCount();
QString defItem = "a";
for (int irow = 0; irow <max_row; irow++) {
for (int icol = 0; icol < max_column; icol++) {
QTableWidgetItem *pItem = ui.tableWidget->item(irow, icol);
if (pItem) {
out << pItem->text(); // text inklusive ","
} else {
out << defItem;
}
}
out << "\r\n"; // Zeilenvorschub
}
file.close();
}
void MainWindow::tPlayDemoHandler() {
fileName = ui.tFilename->text();
if (fileName.isEmpty()) {
ui.tErrorlabel->setText("<font color=red>No file Name specified</font>");
return;
}
if (!fileName.contains(".txt")) {
fileName.append(".txt");
}
fileName.insert(0, "demo/");
QFile file(fileName);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
ui.tErrorlabel->setText(
"<font color=red>The file couldn't be open.\nPlease try again.</font>");
return;
}
tDeleteallHandler();
QDataStream in(&file);
QString item;
int irow = 0;
while (!in.atEnd()) {
for (int icol = 0; icol < 7; icol++) {
in >> item;
if (item.compare("a") != 0) {
QTableWidgetItem *pItem = new QTableWidgetItem(item);
ui.tableWidget->setItem(irow, icol, pItem);
}
}
irow++;
}
file.close();
}
QTableWidget zeigt nur die 1. Zeile an
Das Verhalten ist bei mir gleich.
Ich glaub der Fehler liegt irgendwo bei QDataStream.
Es gibt dafür ein Beispiel in der Doku
Welches aber schon nicht funktioniert. Er schreibt die Daten richtig in die Datei, ausgelesen werden aber nur nicht druckbare Zeichen. Ausser bei der Zahl. Da funktioniert es.
// edit
Hab den Fehler. Man liest ein QString rein, also muss man auch ein QString schreiben
Kann man wer schauen ob das wirklich ein Fehler in der Doku ist?
Den zweiten Fehler hab ich auch. Entferne in der Funktion tSaveDemoHandler() diese Zeile
Dann geht es, die Textdatei hat natürlich keine Zeilenumbrüche mehr. Also entweder beim Einlesen die Zeilenumbrüche extra behandeln oder vllt. mal QTextStream versuchen.
Ich glaub der Fehler liegt irgendwo bei QDataStream.
Es gibt dafür ein Beispiel in der Doku
Code: Alles auswählen
Example (write binary data to a stream):
QFile file("file.dat");
file.open(QIODevice::WriteOnly);
QDataStream out(&file); // we will serialize the data into the file
out << "the answer is"; // serialize a string
out << (qint32)42; // serialize an integer
Example (read binary data from a stream):
QFile file("file.dat");
file.open(QIODevice::ReadOnly);
QDataStream in(&file); // read the data serialized from the file
QString str;
qint32 a;
in >> str >> a;
// edit
Hab den Fehler. Man liest ein QString rein, also muss man auch ein QString schreiben
Code: Alles auswählen
out << QString("the answer is");
Den zweiten Fehler hab ich auch. Entferne in der Funktion tSaveDemoHandler() diese Zeile
Code: Alles auswählen
out << "\r\n"; // Zeilenvorschub