您可以假设 QSettings 被实现为全局std::map<QString, QVariant>,其作用类似于设置的缓存。文档说:
QSettings 存储设置。每个设置都包含一个指定设置名称(键)的 QString 和一个存储与键关联的数据的 QVariant。
出于效率原因,文档说:
为了提高效率,更改可能不会立即保存到永久存储中。 (您可以随时调用 sync() 来提交您的更改。)
每次修改设置时,缓存值都会更新,但不会更新持久文件。 QSettings 的行为取决于平台。
如果您想知道它存储/刷新位于硬盘驱动器中的文件的频率,您需要知道它的位置。
您可以使用QStandardPaths 类和QStandardPaths::ConfigLocation 标签检索路径:
qDebug() << QStandardPaths::writableLocation(QStandardPaths::ConfigLocation);
要跟踪文件中的修改(同步功能的执行频率),您可以使用此python script。
回答您的问题: ?这是否总是将我的设置重置到我启动程序时的位置,这意味着在使用 sync() 时我永远无法在运行时更改我的配置?
QSettings::sync 将系统文件中的修改与缓存中的修改合并以将其存储在文件中。如果您有多个应用程序修改同一个文件,它们可能会相互覆盖。
在您的情况下,如果您使用QSettings 来保存您自己的应用程序的数据,它不会将任何内容恢复到原始状态。它会始终将您的修改写入文件并保持缓存为最新。