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 ...


Anmelden zum Antworten