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

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

Qtプログラミング – スプレッドシート・書き込みとコンストラクタ

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

津路です。
これまで、スプレッドシートのファイルへの保存、読み込みなどを実装しました。
次は、セルの変更処理機能を追加します。
その前に、以前保存処理をご紹介したときに、ファイルへの書き込み関数を記載し忘れていました。
今更ですが。。

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クラスのコンストラクタで行う処理があります。

    autoRecalc = true;
    setItemPrototype(new Cell);
    setSelectionMode(ContiguousSelection);
    connect(this,SIGNAL(itemChanged(QTableWidgetItem *)), this, SLOT(somethingChanged()));
    clear();

autoRecalcは、変更されたときシートの計算をするために必要なフラグです。
setItemPrototypeでは、Cellクラスのインスタンスを生成して、それをひな型として登録します。自動生成されるときに、これを元にセルが生成されます。
setSelectionModeは、セルの選択を複数同時に行うことを可能にします。
セルの式が変更されると、somethingChangedスロットが呼ばれます。

次回は、セルの変更処理です。

    上に戻る