Qtプログラミング – スプレッドシート・書き込みとコンストラクタ
津路です。
これまで、スプレッドシートのファイルへの保存、読み込みなどを実装しました。
次は、セルの変更処理機能を追加します。
その前に、以前保存処理をご紹介したときに、ファイルへの書き込み関数を記載し忘れていました。
今更ですが。。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | bool Spreadsheet::writeFile(const QString &fileName) { QFile file(fileName); if(!file.open(QIODevice::WriteOnly)) { QMessageBox::warning(this, tr("Spreadsheet"), tr("Cannot write file %1:\n%2,").arg(file.fileName()).arg(file.errorString())); return false; } QDataStream out(&file); out.setVersion(QDataStream::Qt_4_1); out << quint32(MagicNumber); QApplication::setOverrideCursor(Qt::WaitCursor); for(int row=0; row < RowCount; ++row) { for(int column=0; column < ColumnCount; ++column) { QString str = formula(row, column); if(!str.isEmpty()) out << quint16(row) << quint16(column) << str; } } QApplication::restoreOverrideCursor(); return true; } |
mainwindowクラスから利用する、Spreadsheetクラスに実装します。
読み出し時と同様、setVersion呼び出し、更にMagicNumberを保存します。
そして、formulaを保存します。
さて、Spreadsheetクラスのコンストラクタで行う処理があります。
1 2 3 4 5 | autoRecalc = true; setItemPrototype(new Cell); setSelectionMode(ContiguousSelection); connect(this,SIGNAL(itemChanged(QTableWidgetItem *)), this, SLOT(somethingChanged())); clear(); |
autoRecalcは、変更されたときシートの計算をするために必要なフラグです。
setItemPrototypeでは、Cellクラスのインスタンスを生成して、それをひな型として登録します。自動生成されるときに、これを元にセルが生成されます。
setSelectionModeは、セルの選択を複数同時に行うことを可能にします。
セルの式が変更されると、somethingChangedスロットが呼ばれます。
次回は、セルの変更処理です。