Home | All Classes | Main Classes | Annotated | Grouped Classes | Functions |

# File Handling

(Extracts from `chartform_files.cpp`.)

## Reading Chart Data

        void ChartForm::load( const QString& filename )
        {
            QFile file( filename );
            if ( !file.open( IO_ReadOnly ) ) {
                statusBar()->message( QString( "Failed to load \'%1\'" ).
                                        arg( filename ), 2000 );
                return;
            }

            init(); // Make sure we have colours
            m_filename = filename;
            QTextStream ts( &file );
            Element element;
            int errors = 0;
            int i = 0;
            while ( !ts.eof() ) {
                ts >> element;
                if ( element.isValid() )
                    m_elements[i++] = element;

            file.close();

            setCaption( QString( "Chart -- %1" ).arg( filename ) );
            updateRecentFiles( filename );

            drawElements();
            m_changed = false;
        }

Loading a data set is very easy. We open the file and create a text stream. While there's data to read we stream an element into `element` and if it is valid we insert it into the `m_elements` vector. All the detail is handled by the `Element` class. Then we close the file and update the caption and the recent files list. Finally we draw the chart and mark it as unchanged.

## Writing Chart Data

        void ChartForm::fileSave()
        {

            QFile file( m_filename );
            if ( !file.open( IO_WriteOnly ) ) {
                statusBar()->message( QString( "Failed to save \'%1\'" ).
                                        arg( m_filename ), 2000 );
                return;
            }
            QTextStream ts( &file );
            for ( int i = 0; i < MAX_ELEMENTS; ++i )
                if ( m_elements[i].isValid() )
                    ts << m_elements[i];

            file.close();

            setCaption( QString( "Chart -- %1" ).arg( m_filename ) );
            statusBar()->message( QString( "Saved \'%1\'" ).arg( m_filename ), 2000 );
            m_changed = false;
        }

Saving data is equally easy. We open the file and create a text stream. We then stream every valid element to the text stream. All the detail is handled by the `Element` class.

« Canvas Control | Contents | Taking Data »