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

津路です。
今回は、シートをファイルに保管します。
まず、保存するための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);