Seite 1 von 1

Editiertes wird nicht in Datei geschrieben

Verfasst: 26. Juli 2014 23:57
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?

Re: Editiertes wird nicht in Datei geschrieben

Verfasst: 27. Juli 2014 09:57
von Christian81
Also die Schreibroutine allein funktioniert bei mir problemlos. Ist Zahlen.dat wirklich schreibbar?

Re: Editiertes wird nicht in Datei geschrieben

Verfasst: 30. Juli 2014 22:42
von dolin93
Vielen Dank für Deine Antwort!
Die Dateien in C:/ sind scheinbar nicht schreibbar. Im Programmordner ist Zahlen.dat dagegen schreibbar.