Editiertes wird nicht in Datei geschrieben
Verfasst: 26. Juli 2014 23:57
Hallo,
das Lesen aus Dateien und anschließende Darstellen mit QTableView klappt prima. Das Editieren von Werten klappt auch. Wenn ich aber in dialog.cppin der Methode setData die folgende Veränderung vornehme, so werden zwar a[0][1] und a[0][2] über die Konsole auch bei Veränderung dieser Werte richtig ausgegeben, aber das veränderte Array a wird nicht in Zahlen.dat gespeichert, so daß nach erneutem Starten des Programmes immer wieder die alte Datei Zahlen.dat erscheint. Kann mir jemand mitteilen, wie ich vorgehen muß, um das veränderte Array a in Zahlen.dat zu speichern?
das Lesen aus Dateien und anschließende Darstellen mit QTableView klappt prima. Das Editieren von Werten klappt auch. Wenn ich aber in dialog.cpp
Code: Alles auswählen
#include "dialog.h"
#include <cmath>
#include <QCoreApplication>
#include <QFile>
#include <QString>
#include <QDebug>
#include <iostream>
#include <fstream>
Dialog::Dialog( int rows, int columns, QObject *parent ) : QAbstractTableModel( parent )
{
m_rows = rows;
m_columns = columns;
QFile file("C:/Zahlen.dat");
// if( !file.open(QIODevice::ReadOnly ))
// { qDebug()<<"Zahlen.dat existiert nicht.";
// }
//qDebug()<<"offfffen";
int i=0, j=1;
std::ifstream fin("C:/Zahlen.dat",std::ios::in);
while(fin>>n)
{ a[i][j]=n;
j++;
if(j%20==0)
{i++;
j=1;
}
}
// file.close();
QFile fileB("C:/Bezeichnung.dat");
if( !fileB.open( QIODevice::ReadOnly ))
{ qDebug()<<"Datei Bezeichnung.dat existiert nicht.";
//return false;
}
qDebug()<<"Bezeichnung.dat offfffen";
QTextStream finB(&fileB);
while(!finB.atEnd())
{QString m1;
finB >> m1;
t1.append(m1);
j++;
Zeilenanzahl=j;
}
file.close();
}
int Dialog::rowCount( const QModelIndex &parent ) const
{
return m_rows;
}
int Dialog::columnCount( const QModelIndex &parent ) const
{
return m_columns;
}
Qt::ItemFlags Dialog::flags( const QModelIndex &index ) const
{
return Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsEnabled ;
}
QVariant Dialog::data( const QModelIndex &index, int role ) const
{
switch( role )
{
case Qt::DisplayRole:
if(index.column()==0)
{return (t1[index.row()]);
}else
{return (a[index.row()][index.column()]);
}
case Qt::ToolTipRole:
return QString( "%1 x %2" ).arg( index.row()+1 ).arg( index.column()+1 );
default:
return QVariant();
}
}
bool Dialog::setData(const QModelIndex & index, const QVariant & value, int role)
{
if (role == Qt::EditRole)
{if(index.column()==0)
{t1[index.row()] = value.toString();
}else
{a[index.row()][index.column()] = value.toFloat();
}
emit dataChanged(index, index);
}
return true;
}
QVariant Dialog::headerData( int section, Qt::Orientation orientation, int role ) const
{
if( role != Qt::DisplayRole )
return QVariant();
return QString::number( section );
//return QString::number( section+1 );
}Code: Alles auswählen
if (role == Qt::EditRole)
{if(index.column()==0)
{t1[index.row()] = value.toString();
}else
{a[index.row()][index.column()] = value.toFloat();
}
emit dataChanged(index, index);
}
std::cout<<" a[0][1]="<<a[0][1]<<" a[0][2]="<<a[0][2]<<std::endl;
qDebug()<<" t1[0]="<<t1[0];
std:: ofstream ffout ("C:/Zahlen.dat",std::ios::out | std::ios::trunc);
for(int i=0;i<Zeilenanzahl;i++)
{for(int j=0;j<19;j++)
{ffout<<" "<<a[i][j];
}
}
return true;