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(); |