[Quick Qt: 1] Сохранение настроек приложений Qt с использованием QSettings

Действительно легко и просто сохранить настройки приложения Qt и перезагрузить его при запуске приложения.

Давайте начнем.

Для демонстрации я для начала воспользуюсь простым примером.

Откройте свой Qt Creator, Новый проект ›Имя проекта› [Выбрать соответствующий комплект] ›Установить имя класса› Готово

Вот пошаговая иллюстрация, если вам нужно увидеть

Теперь это создаст для вас 5 файлов. Для меня это были:

main.cpp 
qsettingsexample.cpp
qsettingsexample.h
qsettingsexample.ui
SettingsExample.pro

Я собираюсь использовать QLineEdit, QString, QSettings & QPushButton, поэтому эти файлы заголовков должны быть включены первыми. После включения необходимых файлов заголовков я собираюсь добавить пару функций.

void saveSettings (const QString &key, const QVariant &value, const QString &group);
QVariant loadSettings(const QString &key, const QVariant &defaultValue, const QString &group);

Таким образом, файл будет выглядеть примерно так

Как работают QSettings

Сохранение значения:

QSettings сохраняет данные по паре ключ-значение. И набор пар "ключ-значение" объединяется в группу.

Предположим, я хочу сохранить «Qt» в качестве идентификатора входа и «милый» в качестве пароля. Поэтому я должен сделать следующее.

  • Создайте объект QSettings
  • Начните объект с имени группы
  • Теперь сохраните пару "ключ-значение"
  • Завершить группу

Если я переведу алгоритм в код

QString userID = "Qt";
QString password = "cute";
QString group = "Authentication";
//Creating QSettings object
QSettings settings;
settings.beginGroup(group);
settings.setValue(userID, password);
settings.endGroup();

Теперь идентификатор пользователя сохраняется с паролем в группе «Аутентификация».

Получение ценности

Чтобы получить сохраненный пароль для соответствующего идентификатора пользователя, мне теперь нужно инициировать объект QSettings с тем же именем группы, которое я использовал для сохранения учетных данных аутентификации. Чтобы получить сохраненные значения, мне нужно сделать следующее.

//If the key is not found then this value will be returned
QVariant defaultValue;
QSettings settings;
settings.beginGroup(group);
QVariant value = settings.value(key, defaultValue);
settings.endGroup();
//Since the value retrieved from the settings object is a string, we have to convert the QVariant object into a QString object
QString passKey = value.toString();

После сложения:

До сих пор я не использовал функции saveSettings (*) и loadSettings (*), о которых я упоминал ранее. Этот фрагмент кода будет полезен для выполнения этих функций.

Добавление этих функций в файл .cpp,

Теперь все, что нам нужно сделать, это создать файл пользовательского интерфейса, чтобы сохранить и загрузить настройки. Для этого я создал простой пользовательский интерфейс, состоящий из QLineEdit 2 QPushButton (s) и QLabel. Снимок экрана приведен ниже,

Вы можете создать пользовательский интерфейс самостоятельно или просто скопировать и вставить следующий код в свой файл .ui.

Связывание функций настроек с помощью кнопок:

У нас есть подпрограмма настройки сохранения / загрузки, простой интерфейс. Все, что нам нужно сделать, это связать функции с кнопкой, чтобы проверить это. Простой сигнал / слот подойдет. Прежде чем углубляться в детали, давайте определим нашу цель для этих кнопок и QLineEdit.

Цель:

  • При нажатии кнопки Сохранить данные текст, написанный в QLineEdit, будет сохранен.
  • При нажатии кнопки Загрузить данные отображается ранее сохраненный текст.

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

Перейдите к файлу .ui, щелкните правой кнопкой мыши кнопку Сохранить данные и выберите Перейти к слоту…

Выберите сигнал клика, а затем нажмите ОК.

Теперь вы видите, что для вас создана следующая функция.

void QSettingsExample::on_saveDataButton_clicked(){}

В функциональном блоке я должен ввести код настройки сохранения. Если я сделаю то же самое с Загрузить данные, полный код будет

Пояснение к коду:

Я определил в коде три постоянные строки, которые нуждаются в пояснении.

  • Поскольку я делаю этот пример проекта только для того, чтобы показать вам, что нужно сохранять только одни данные, поэтому используется один «КЛЮЧ», та же теория может быть применена и к «ГРУППЕ».
  • Когда в приложении много настроек и много данных, которые нужно сохранить, вы всегда можете использовать набор пар ключ-значение. В моем примере это не обязательно.

Работает?

Ответ будет НЕТ. Почему? Потому что вам нужно добавить имя приложения, имя организации и домен организации (не уверен), чтобы эти функции сохранения и загрузки настроек работали.

Перейдите в файл main.cpp и добавьте важную информацию, следуя этому коду.

Теперь это работает?

Он должен работать! Иначе что-то не так, очень-очень неправильно!

На этом пока все, надеюсь, вам не наскучил этот длинный пост. Спасибо за прочтение.

Вы можете скачать полные файлы проекта здесь.