大阪市中央区 システムソフトウェア開発会社

営業時間:平日09:15〜18:15
MENU

Qtプログラミング – スプレッドシートのセル・クラス

株式会社クローバーフィールドの経営理念
著者:津路高広
公開日:2019/10/26
最終更新日:2019/10/26
カテゴリー:技術情報

津路です。
前回までで、メニューの作成、スプレッドシートの新規作成、保存までを終えました。
今回は、ファイルに保存したシートを読み込む機能を作成します。
まず、SpreadSheet クラスは、QTableWidgetをサブクラス化していますが、シートの各セルは、QTableWidgetItem です。
このクラスをサブクラス化して、新たにCell クラスを作成します。

#ifndef CELL_H
#define CELL_H
#include <QTableWidgetItem>
class Cell : public QTableWidgetItem
{
public:
    Cell();
    ~Cell();
    void setFormula(const QString &);
    QString formula() const;

private:
};

#endif

実装ファイルは以下のようになります。

#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クラスから利用します。
まず、セルのインスタンスをもらってくる関数です。

Cell *Spreadsheet::cell(int row, int column) const
{
    return static_cast<Cell *>(item(row, column));
}

item(row,column)関数は、QTableWidgetクラスの関数で、指定された位置のセルを返します。
ここでは、Cellクラスのオブジェクトのポインタを、スタティックキャストして返却します。

セルに式を設定する関数です。

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関数にて式を設定します。
オブジェクトが取得できない場合は、新規にオブジェクトを作成して、セルを設定します。
次回は、以上の仕組みを使って読み込み機能を実装します。

    上に戻る