[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 и добавьте важную информацию, следуя этому коду.
Теперь это работает?
Он должен работать! Иначе что-то не так, очень-очень неправильно!
На этом пока все, надеюсь, вам не наскучил этот длинный пост. Спасибо за прочтение.
Вы можете скачать полные файлы проекта здесь.