void visualICDAR::open()
{QString fileName = QFileDialog::getOpenFileName( this, tr( "Open Image" ),
QDir::homePath(), tr("Images ( *.tif )") );
if( !fileName.isEmpty() )
{
QApplication::setOverrideCursor( QCursor( Qt::WaitCursor ) );
pixmapWidget->setPixmap( fileName );
QString dataFileName = fileName.replace( fileName.length() - 3, 3, "csv" );
QFile data( dataFileName );
if( !data.open(QIODevice::ReadOnly|QIODevice::Text) )
{
QMessageBox::warning( this, "NoCSV file founs!",
QString( "No %1 file was found!" ).arg( dataFileName ) );
}
QTextStream text( &data );
text.setCodec( "UTF-8" );
QString dataString = text.readAll();
( (QStandardItemModel*)fileWidget->model() )->clear();
fileWidget->AddRowsFromString( dataString );
fileWidget->setOutputFile( dataFileName );
data.close();
QApplication::restoreOverrideCursor();
}
}
class CFileWidget : public QTableView
{
Q_OBJECT
public:
CFileWidget(QWidget *parent);
~CFileWidget();
void setOutputFile( const QString fileName )
{ outputFile.setFileName(fileName);
outputFile.open(QIODevice::WriteOnly|QIODevice::Text); }
public slots:
void AddRowsFromString( const QString& text );
void DeleteSelectedRows();
void AddRow();
void SaveToFile();
signals:
void SelectRects( const QList<QRect>& rects, const QList<QRect>& parenRects );
protected slots:
void selectionChanged ( const QItemSelection & selected, const QItemSelection & deselected );
private:
int addonId;
QFile outputFile;
};
void CFileWidget::SaveToFile()
{
QTextStream textStream( &outputFile );
textStream.setCodec( "UTF-8" );
for( int row = 0; row < ( (QStandardItemModel*)model() )->rowCount(); ++row )
{
int column = 0;
while( ( (QStandardItemModel*)model() )->item( row, column ) )
{
textStream<<( (QStandardItemModel*)model() )->item( row, column )->data( Qt::DisplayRole ).toString();
textStream<<"\t";
column++;
}
textStream<<"\n";
}
}
ファイルからデータを読み取ろうとしていますが、読み取るとファイルが空になります。なぜそれが起こったのですか?プログラムに何らかのエラーが表示された場合、データは保存されず、失われますか? では、ファイルを開いて読み取り、すべてのデータを保持する方法は? 私が理解しているように、書き込み専用モードで再度開くと、追加ではなくすべてのデータが書き換えられますか?
コードについて最初の関数はファイルを開くためのもので、2番目のコードはQFileを格納するクラスで、3番目はファイル関数に保存するためのものです