Qtプログラミング – スプレッドシートの読み込み

津路です。
 今回は、前回作成したクラスを利用して、スプレッドシートをファイルから読み込みます。
 そのクラスとはCellという名前で、QTableWidgetItemクラスをサブクラス化したクラスです。
 これをSpreadSheetクラスから利用するために、cell関数と、式を設定するsetFormula関数を、前回紹介しました。
始めに、save関数で設定した形式のファイルからデータを読み込みます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18  | bool Spreadsheet::readFile(const QString &fileName) {     QFile file(fileName);     if(!file.open(QIODevice::ReadOnly)) {  QMessageBox::warning(this, tr("Spreadsheet"),  tr("Cannot read file %1:\n%2,").arg(file.fileName()).arg(file.errorString()));  return false;     }     QDataStream in(&file);     in.setVersion(QDataStream::Qt_4_1);     quint32 magic;     in >> magic;     if(magic != MagicNumber) {  QMessageBox::warning(this, tr("Spreadsheet"),  tr("The file is not a Spreadsheet file."));  return false;     } }  | 
ここで、MagicNumberとは、このプログラム独自の番号です。
1  | enum { MagicNumber = 0x7F51C883 };  | 
setVersionは、QDataStreamに設定するQtバージョンです。
 この処理は、入出力においてバージョン管理をするための仕組みです。
次に clear関数にて、シートの初期値を設定します。
1 2 3 4 5 6 7 8 9 10 11 12 13  | void Spreadsheet::clear() {     setRowCount(0);  //行列の1つめをカレントとする     setColumnCount(0);     setRowCount(RowCount); //行数     setColumnCount(ColumnCount); //列数     for(int i=0; i<ColumnCount; ++i) {  //セルのインスタンスを生成し、名前を設定  QTableWidgetItem *item = new QTableWidgetItem;  item->setText(QString(QChar('A'+i)));  setHorizontalHeaderItem(i,item);     }     setCurrentCell(0,0); //0行0列をデフォルトに設定 }  | 
そして、読み込んだデータを、各セルに反映します。
1 2 3 4 5 6 7 8 9  |     quint16 row;     quint16 column;     QString str;     QApplication::setOverrideCursor(Qt::WaitCursor);     while (!in.atEnd()) {  in >> row >> column >> str;  setFormula(row, column, str);     }     QApplication::restoreOverrideCursor();  | 

