Четвертый аргумент определяет фильтры файлов. Фильтр файла состоит из описательной части и образца поиска. Если допустить поддержку не только родного формата файлов приложения Электронная таблица, а также формата файлов с запятой в качестве разделителя и файлов Lotus 1-2-3, нам пришлось бы инициализировать переменные следующим образом:
tr("Spreadsheet files (*.sp)\n"
"Comma-separated values files (*.csv)\n"
"Lotus 1-2-3 files (*.wk1 *.wks)")
Закрытая функция
01 bool MainWindow::loadFile(const QString &fileName)
02 {
03 if (!spreadsheet->readFile(fileName)) {
04 statusBar()->showMessage(tr("Loading canceled"), 2000);
05 return false;
06 }
07 setCurrentFile(fileName);
08 statusBar()->showMessage(tr("File loaded"), 2000);
09 return true;
10 }
Мы используем функцию
В обоих случаях мы будем выдавать сообщение в строке состояния в течение 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 }