QSettings:sync Когда происходит синхронизация?

Из справочной функции Qt:

void QSettings::sync() Writes any unsaved changes to permanent storage, and reloads any settings that have been changed in the meantime by another application. This function is called automatically from QSettings's destructor and by the event loop at regular intervals, so you normally don't need to call it yourself.

Что именно здесь означает «тем временем»? Всегда ли это сбрасывает мои настройки до точки, когда я запускал свою программу, то есть я никогда не могу изменить свою конфигурацию во время ее выполнения при использовании sync()?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
1 353
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Можно предположить, что QSettings реализован как глобальный std::map<QString, QVariant>, который действует как кеш настроек. В документации говорится:

QSettings stores settings. Each setting consists of a QString that specifies the setting's name (the key) and a QVariant that stores the data associated with the key.

По соображениям эффективности в документации говорится:

For efficiency, the changes may not be saved to permanent storage immediately. (You can always call sync() to commit your changes.)

Каждый раз, когда вы изменяете параметр, значение кэша обновляется, но не постоянный файл. Поведение QSettings зависит от платформы.

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

Вы можете получить путь, используя класс QStandardPaths и тег QStandardPaths::ConfigLocation:

qDebug() << QStandardPaths::writableLocation(QStandardPaths::ConfigLocation);

Чтобы отслеживать изменения в файле (как часто выполняются функции синхронизации), вы можете использовать этот скрипт питона.

Отвечая на ваш вопрос: ? Всегда ли это сбрасывает мои настройки до точки, когда я запускал свою программу, то есть я никогда не могу изменить свою конфигурацию во время ее выполнения при использовании sync()?

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

В вашем случае, если вы используете QSettings для сохранения данных своего собственного приложения, оно ничего не восстановит в исходное состояние. Он всегда будет записывать ваши изменения в файл и поддерживать кеш в актуальном состоянии.

Другие вопросы по теме