The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Каталог документации / Раздел "Программирование, языки" / Оглавление документа

3.6. Сохранение пользовательских настроек приложения.

В конструкторе MainWindow, для загрузки пользовательских настроек, мы вызывали функцию readSettings(). Аналогично, для их сохранения, в обработчике closeEvent(), вызывалась функция writeSettings(). Пришло время рассмотреть реализацию обоих функций, которые являются методами класса MainWindow.

Для своего приложения, в качестве хранилища настроек, мы выбрали класс QSettings. Экземпляр этого класса может быть создан и использован в любой момент, по мере необходимости.

void MainWindow::writeSettings() 
{ 
  QSettings settings; 
  settings.setPath("software-inc.com", "Spreadsheet"); 
  settings.beginGroup("/Spreadsheet"); 
  settings.writeEntry("/geometry/x", x()); 
  settings.writeEntry("/geometry/y", y()); 
  settings.writeEntry("/geometry/width", width()); 
  settings.writeEntry("/geometry/height", height()); 
  settings.writeEntry("/recentFiles", recentFiles); 
  settings.writeEntry("/showGrid", showGridAct->isOn()); 
  settings.writeEntry("/autoRecalc", showGridAct->isOn()); 
  settings.endGroup(); 
}
      
Функция writeSettings() сохраняет геометрию главного окна (положение на экране и размеры), список недавно использовавшихся файлов и состояние флагов Show Grid и Auto-recalculate.

Место, куда QSettings сохраняет настройки, зависит от используемой платформы. В Windows сохранение производится в системный реестр, в Unix -- в текстовый файл, в Mac OS X используется Carbon API. Методу setPath() передаются названия организации и программного продукта. Эти сведения используются для преобразование в платформо-зависимое представление места сохранения настроек.

Настройки хранятся в виде пары: ключ-значение. Ключ очень похож на строку пути в файловой системе и всегда должен начинаться с названия приложения. Например, /Spreadsheet/geometry/x или /Spreadsheet/showGrid. (Функция beginGroup() "запоминает" префикс ключа - название приложения, которое будет автоматически подставляться в начало ключа, что позволяет нам сэкономить на своих усилиях.) Значение, той или иной настройки, может быть одного из пяти типов: int, bool, double, QString или QStringList.

void MainWindow::readSettings() 
{ 
  QSettings settings; 
  settings.setPath("software-inc.com", "Spreadsheet"); 
  settings.beginGroup("/Spreadsheet"); 
  int x = settings.readNumEntry("/geometry/x", 200); 
  int y = settings.readNumEntry("/geometry/y", 200);      
  int w = settings.readNumEntry("/geometry/width", 400); 
  int h = settings.readNumEntry("/geometry/height", 400); 
  move(x, y); 
  resize(w, h); 
  
  recentFiles = settings.readListEntry("/recentFiles"); 
  updateRecentFileItems(); 
  
  showGridAct->setOn( 
          settings.readBoolEntry("/showGrid", true)); 
  autoRecalcAct->setOn( 
          settings.readBoolEntry("/autoRecalc", true)); 
          
  settings.endGroup(); 
}
      
Функция readSettings() загружает настройки, предварительно сохраненные вызовом writeSettings(). Второй аргумент в "read"-функциях -- это значение по-умолчанию, возвращаемое в том случае, если запрошенный ключ отсутствует. Значения по-умолчанию используются на самом первом запуске приложения, когда настройки еще не были сохранены.

На этом мы заканчиваем рассмотрение реализации главного окна приложения. В следующих разделах мы покажем, как изменить наше приложение, чтобы оно могло работать одновременно с несколькими документами, и как добавить к приложению показ заставки во время загрузки.




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2021 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру