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;