Qtプログラミング – スプレッドシートのセル・クラス
津路です。
前回までで、メニューの作成、スプレッドシートの新規作成、保存までを終えました。
今回は、ファイルに保存したシートを読み込む機能を作成します。
まず、SpreadSheet クラスは、QTableWidgetをサブクラス化していますが、シートの各セルは、QTableWidgetItem です。
このクラスをサブクラス化して、新たにCell クラスを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #ifndef CELL_H #define CELL_H #include <QTableWidgetItem> class Cell : public QTableWidgetItem { public: Cell(); ~Cell(); void setFormula(const QString &); QString formula() const; private: }; #endif |
実装ファイルは以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include <QtGui> #include "cell.h" Cell::Cell() { } Cell::~Cell(){} QString Cell::formula() const { return data(Qt::EditRole).toString(); } void Cell::setFormula(const QString &formula) { setData(Qt::EditRole, formula); } |
ここで、setFormulaという関数は、セルの式を設定します。
EditRoleとは、Qt文書ではThe data in a from suitable for editing in an editor.という説明になっています。
表示用のロールは、DisplayRoleと呼びます。
formula関数は、EditRoleで設定された式を文字列にして返却します。
次に、このクラスをSpreadsheetクラスから利用します。
まず、セルのインスタンスをもらってくる関数です。
1 2 3 4 | Cell *Spreadsheet::cell(int row, int column) const { return static_cast<Cell *>(item(row, column)); } |
item(row,column)関数は、QTableWidgetクラスの関数で、指定された位置のセルを返します。
ここでは、Cellクラスのオブジェクトのポインタを、スタティックキャストして返却します。
セルに式を設定する関数です。
1 2 3 4 5 6 7 8 9 | void Spreadsheet::setFormula(int row, int column, const QString &formula) { Cell *c = cell(row, column); if(!c) { c = new Cell; setItem(row, column, c); } c->setFormula(formula); } |
セルのオブジェクトを取得して、setFormula関数にて式を設定します。
オブジェクトが取得できない場合は、新規にオブジェクトを作成して、セルを設定します。
次回は、以上の仕組みを使って読み込み機能を実装します。