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() для чтения файла с диска
<< назад вперед >>