void MainWindow::open()

{

if (maybeSave()) {

QString fileName =

QFileDialog::getOpenFileName(".", fileFilters, this); if (! fileName. isEmptyO) loadFile(fileName);

}

}

Слот open() соответствует пункту меню File|Open. Как и слот newFile(), он сна­чала вызывает okToContinue() для обработки несохраненных изменений. Затем он вызывает удобную статическую функцию QFileDialog: :getOpenFileName() для полу­чения от пользователя нового имени файла. Эта функция выводит на экран диалого­вое окно для выбора пользователем файла и возвращает имя файла или пустую стро­ку при нажатии пользователем клавиши Cancel.

В первом аргументе функции QFileDialog:: getOpenFileName() задается родитель­ский виджет. Взаимодействие родительских и дочерних объектов для диалоговых окон и для других виджетов будет различно. Диалоговое окно всегда является само­стоятельным окном, однако если у него имеется родитель, то оно размещается по умолчанию в верхней части родительского объекта. Кроме того, дочернее диалоговое окно использует панель задач родительского объекта.

Во втором аргументе задается название диалогового окна. В третьем аргументе задается каталог начала просмотра файлов; в нашем случае это будет текущий ката­лог.

Четвертый аргумент определяет фильтры файлов. Фильтр файла состоит из опи­сательной части и образца поиска. Если допустить поддержку не только родного формата файлов приложения Электронная таблица, а также формата файлов с запя­той в качестве разделителя и файлов Lotus 1-2-3, нам пришлось бы инициализиро­вать переменные следующим образом:

tr("Spreadsheet files (*.sp)\n"

"Comma-separated values files (*.csv)\n"

"Lotus 1-2-3 files (*.wk1 *.wks)") ;

Закрытая функция loadFile() вызвана в open() для загрузки файла. Мы делаем эту функцию независимой, поскольку нам потребуется выполнить те же действия для загрузки файлов, которые открывались недавно:

bool MainWindow::loadFile(const QString &fileName) {

if (!spreadsheet->readFile(fileName)) {

statusBar()->showMessage(tr("Loading canceled"), 2000); return false;

}

setCurrentFile(fileName);

statusBar()->showMessage(tr("File loaded"), 2000); return true;

}

Мы используем функцию Spreadsheet:: readFile() для чтения файла с диска


<< назад вперед >>