Qtプログラミング – スプレッドシートの保存
津路です。
今回は、シートをファイルに保管します。
まず、保存するためのQActionを作成します。
1 2 3 4 5 6 7 8 9 | <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())); |
次に、ファイルに保存する関数を作成します。
1 2 3 4 5 6 7 8 9 10 | 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関数は、以下のように現在の対象ファイル名をメモリに保存します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <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(); } |
次に、保存ファイル名を尋ねるダイアログを作成します。
1 2 3 4 5 6 | bool MainWindow::saveAs() { QString fileName = QFileDialog::getSaveFileName(this, tr("Save Spreadsheet"), ".", tr("Spreadsheet files (*.sp)")); if(fileName.isEmpty()) return false; return saveFile(fileName); } |
次に、保存スロットです。
1 2 3 4 5 6 7 8 | bool MainWindow::save() { if(curFile.isEmpty()) { return saveAs(); } else { return saveFile(curFile); } } |
保存アクションをメニューに登録して終わりです。
1 2 | fileMenu = menuBar()->addMenu(tr("&File")); fileMenu->addAction(saveAction); |