Editiertes wird nicht in Datei geschrieben

Alles rund um die Programmierung mit Qt
Antworten
dolin93
Beiträge: 45
Registriert: 5. Mai 2012 21:35

Editiertes wird nicht in Datei geschrieben

Beitrag von dolin93 »

Hallo,
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 );
}
in der Methode setData die folgende Veränderung

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;
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?
Dateianhänge
MulModelEdit.zip
(6.97 KiB) 262-mal heruntergeladen
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Editiertes wird nicht in Datei geschrieben

Beitrag von Christian81 »

Also die Schreibroutine allein funktioniert bei mir problemlos. Ist Zahlen.dat wirklich schreibbar?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
dolin93
Beiträge: 45
Registriert: 5. Mai 2012 21:35

Re: Editiertes wird nicht in Datei geschrieben

Beitrag von dolin93 »

Vielen Dank für Deine Antwort!
Die Dateien in C:/ sind scheinbar nicht schreibbar. Im Programmordner ist Zahlen.dat dagegen schreibbar.
Antworten