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

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

Qtプログラミング – スプレッドシートの保存

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

津路です。
今回は、シートをファイルに保管します。

まず、保存するためのQActionを作成します。

<mainwindow.h>
QAction *saveAction;

<mainwindow.cpp>
saveAction = new QAction(tr("&Save"),this);
saveAction->setIcon(QIcon(":/images/new_file.png"));
saveAction->setShortcut(tr("Ctrl+S"));
saveAction->setStatusTip(tr("Save the spreadsheet file"));
connect(saveAction, SIGNAL(triggered()), this, SLOT(save()));

次に、ファイルに保存する関数を作成します。

bool MainWindow::saveFile(const QString &filename)
{
    if(!spreadsheet->writeFile(filename)) {
	statusBar()->showMessage(tr("Saving canceled"), 2000);
	return false;
    }
    setCurrentFile(filename);
    statusBar()->showMessage(tr("File Saved"), 2000);
    return true;
}

ここで、setCurrentFile関数は、以下のように現在の対象ファイル名をメモリに保存します。

<mainwindow.h>
QString curFile;

<mainwindow.cpp>
void MainWindow::setCurrentFile(const QString &fileName)
{
    curFile = fileName;
    setWindowModified(false);
    QString showName = "Untitled";
    if(!curFile.isEmpty()) {
	showName = strippedName(curFile);
	recentFiles.removeAll(curFile);
	recentFiles.prepend(curFile);
    }
    setWindowTitle(tr("%1[*] - %2").arg(showName).arg(tr("Spreadsheet")));
}
QString MainWindow::strippedName(const QString &fullFileName)
{
    return QFileInfo(fullFileName).fileName();
}

次に、保存ファイル名を尋ねるダイアログを作成します。

bool MainWindow::saveAs()
{
    QString fileName = QFileDialog::getSaveFileName(this, tr("Save Spreadsheet"), ".", tr("Spreadsheet files (*.sp)"));
    if(fileName.isEmpty()) return false;
    return saveFile(fileName);
}

次に、保存スロットです。

bool MainWindow::save()
{
    if(curFile.isEmpty()) {
	return saveAs();
    } else {
	return saveFile(curFile);
    }
}

保存アクションをメニューに登録して終わりです。

fileMenu = menuBar()->addMenu(tr("&File"));
fileMenu->addAction(saveAction);
    上に戻る