The OpenNET Project
 
Поиск (ключи):  ПРОГРАММЫ СТАТЬИ СОВЕТЫ ФОРУМ
ССЫЛКИ НОВОСТИ (+) MAN'ы ДОКУМЕНТАЦИЯ

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

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"-функциях -- это значение по-умолчанию, возвращаемое в том случае, если запрошенный ключ отсутствует. Значения по-умолчанию используются на самом первом запуске приложения, когда настройки еще не были сохранены.

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


Подпишись на Linux Format и получи один из 3 ценных призов!

Началась подписка на журнал Linux Format на 2010 год. Спешите оформить подписку на единственный в России ежемесячный журнал о Linux!

Все, оформившие подписку на печатную версию журнала, получают диск с архивом журнала Linux Format за 2005-2009г. в подарок. Также в подарок вы получаете именную электронную версию в формате PDF. Теперь вы можете приступить к чтению журнала сразу в момент выхода свежего номера, не дожидаясь, пока вам доставят бумажную версию.

Кроме того, все, оформившие подписку на первую половину или весь 2010 год в интернет-магазине ГНУ/Линуксцентра, автоматически становятся участниками розыгрыша ценных призов:


  Закладки на сайте
  Проследить за страницей
Created 1996-2010 by Maxim Chirkov  
ДобавитьРекламаВебмастеруГИД  
RUNNet TopList