Шаг 174.
Библиотека Qt.
Сохранение настроек приложения

    На этом шаге рассмотрим сохранение настроек приложения.

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

void MainWindow::writeSettings()
{
    QSettings settings("Software Inc.", "Электронные таблицы");
//Функция writeSettings() сохраняет "геометрию" окна (положение и размер),
    settings.setValue("geometry", saveGeometry());
//список последних открывавшихся файлов
    settings.setValue("recentFiles", recentFiles);
//и опции Show Grid (показать сетку)
    settings.setValue("showGrid", showGridAction->isChecked());
//и Auto-Recalculate (автоматический повтор вычислений)
    settings.setValue("autoRecalc", autoRecalcAction->isChecked());
}

    По умолчанию QSettings сохраняет настройки приложения в месте, которое зависит от используемой платформы. В системе Windows для этого используется системный реестр; в системе Unix данные хранятся в текстовых файлах; в системе Mac OS X для этого используется прикладной интерфейс задания установок Core Foundation Preferences. В аргументах конструктора задаются название организации и имя приложения. Эта информация используется затем (причем по-разному для различных платформ) для определения места расположения настроек.

    QSettings хранит настройки в виде пары "ключ-значение". Здесь ключ подобен пути файловой системы. Подключи могут задаваться, используя синтаксис, подобный тому, который применяется при указании пути (например, findDialog/matchCase), или используя beginGroup() и endGroup():

settings.beginGroup("findDialog");
settings.setValue("matchCase", caseCheckBox->isChecked());
settings.setValue("searchBackward", backwardCheckBox->isChecked());
settings.endGroup();

    Значение value может иметь тип int, bool, double, QString, QStringList или любой другой, поддерживаемый QVariant, включая зарегистрированные пользовательские типы.

    Функция readSettings() загружает настройки, которые были сохранены функцией writeSettings().

void MainWindow::readSettings()
{
    QSettings settings("Software Inc.", "Электронные таблицы");
/*Поскольку второй аргумент не задан для геометрии или для списка недавно
используемых файлов, окно будет иметь произвольный, но разумный размер и положение,
а список недавно используемых файлов будет пустым при первом запуске приложения*/
    restoreGeometry(settings.value("geometry").toByteArray());
    recentFiles = settings.value("recentFiles").toStringList();
    updateRecentFileActions();
/*Второй аргумент функции value() определяет значение, принимаемое по умолчанию
в случае отсутствия запрашиваемого параметра. Принимаемые по умолчанию значения
будут использованы при первом запуске приложения*/
    bool showGrid = settings.value("showGrid", true).toBool();
    showGridAction->setChecked(showGrid);
    bool autoRecalc = settings.value("autoRecalc", true).toBool();
    autoRecalcAction->setChecked(autoRecalc);
}

    Весь программный код MainWindow, относящийся к объектам QSettings, мы разместили в функциях readSettings() и writeSettings(); такой подход лишь один из возможных. Объект QSettings может создаваться для запроса или модификации каких-нибудь настроек в любой момент во время выполнения приложения и из любого места программы.

    На следующем шаге рассмотрим реализацию экранных заставок.




Предыдущий шаг Содержание Следующий шаг