Qt: probleme eine datei zu speichern
-
mit dieser funktion wollte ich daten aus einer QTableWidget in eine TExtdatei schreiben. es wird auch fehlerfrei kompilliert. die daten werden anscheinend auch ausgelesen. die textdatei wird erzeugt. aber keine daten hineingeschrieben. weiß jemand was ich verbessern muss?
void save_data(QString pfad, QString filename, QTableWidget *tw_data, int max_row, int max_column) { QFile *new_file = new QFile(); //tabelle auswerten QTableWidgetItem *T_item = new QTableWidgetItem(); QStringList *QStrLst = new QStringList(); for(int i = 0; i < max_row; i++) { for(int j = 0; j < max_column; j++) { if(tw_data->item(i, j)) T_item = tw_data->item(i, j); QStrLst->join(QString::number(i, 10)+"\t"+QString::number(j, 10)+"\t"+T_item->text() ); } } //daten in datei speichern QDir::setCurrent(pfad); //in verzeichnis wecheln new_file->setFileName(filename); //dateinamen festlegen //new_file->open(QIODevice::WriteOnly); //schreibrecht setzen if (!new_file->open(QIODevice::WriteOnly | QIODevice::Text) ) //datei schreibend öffnen return; QTextStream out(new_file); for(int i = 0; i < QStrLst->size(); i++) { std::cout<<"schreibe: "<<(QStrLst->at(i)).toStdString()<<std::endl; out<<QStrLst->at(i)<<"\n"; } new_file->close(); }
-
warum erst den Buffer (stringlist) ?
und warum die ganzen dinge dynamisch ^^
dialoge streams ... etc , alles was nich unter die QObject hirarchie muss, kann man statisch erzeugen ...QTableWidgetItem *T_item = new QTableWidgetItem();
brauchst auch ned, weil du bekommst ja nen zeiger auf nen existierendes Object, brauchst quasi nichts selber anlegen ....
entwoehn dich auch vom Basic stil ^^ man sollt in C / C++ variablen erst erzeugen wenn man sie braucht und nicht am beginn eines blockes ...QFile unterteutzt auch die komplette angabe eines Dateinames, brauchst nicht erst dahinwechseln ...
void save_data(QString pfad, QString filename, QTableWidget *tw_data, int max_row, int max_column) { // hier checken ob deine parameter korreckt sind, bei bedarf ... // Filestream erstellen QFile file(pfad + "\\" + filename); if(file.open(QIODevice::WriteOnly | QIODevice::Text)) { QTextStream out(file); for(int irow = 0; irow < max_row; ++irow ) { for(int icol = 0; icol < max_column; ++icol) { QTableWidgetItem *pItem = tw_data->item(irow,icol); if(pItem ) { out << pItem->text() << "\t"; // text inklusive tab } } out << "\r\n"; // Zeilenvorschub, keine ahnung obs da ne konstante fuer gibt ... } file.close(); } else { // error handling falls das oeffnen schief geht ... } }
Hoffe sind ned viele fehler drinnen, nehm meist die stl um textfiles zu schreiben ...
Unter QT bietet sich XML quasi an ^^
Ciao ...