Мы используем функцию
В обоих случаях мы будем выдавать сообщение в строке состояния в течение 2 секунд (2000 миллисекунд) для того, чтобы пользователь знал о выполняемых приложением действиях.
01 bool MainWindow::save
02 {
03 if (curFile.isEmpty) {
04 return saveAs;
05 } else {
06 return saveFile(curFile);
07 }
08 }
09 bool MainWindow::saveFile(const QString &fileName)
10 {
11 if (!spreadsheet->writeFile(fileName)) {
12 statusBar->showMessage(tr("Saving canceled"), 2000);
13 return false;
14 }
15 setCurrentFile(fileName);
16 statusBar->showMessage(tr("File saved"), 2000);
17 return true;
18 }
Слот
01 bool MainWindow::saveAs
02 {
03 QString fileName = QFileDialog::getSaveFileName(this,
04 tr("SaveSpreadsheet"),
05 tr("Spreadsheet files (*.sp)"));
06 if (fileName.isEmpty)
07 return false;
08 return saveFile(fileName);
09 }
Слот
Если файл с данным именем уже существует, функция
01 void MainWindow::closeEvent(QCloseEvent *event)
02 {
03 if (okToContinue) {
04 writeSettings;
05 event->accept;
06 } else {
07 event->ignore;
08 }
09 }
Когда пользователь выбирает пункт меню File | Exit или щелкает по кнопке X заголовка окна, вызывается слот
Если изменения не сохранены и пользователь нажимает кнопку Cancel, мы «игнорируем» это событие, и оно никак не повлияет на окно. В обычном случае мы реагируем на это событие, и в результате Qt закроет окно. Мы вызываем также закрытую функцию
Когда закрывается последнее окно, приложение завершает работу. При необходимости мы можем отменить такой режим работы, устанавливая свойство
01 void MainWindow::setCurrentFile(const QString &fileName)
02 {
03 curFile = fileName;
04 setWindowModified(false);
05 QString shownName = "Untitled";
06 if (!curFile.isEmpty) {
07 shownName = strippedName(curFile);