QSettings:sync 什么时候同步?

New*_*yes 2 qt synchronization qsettings

从 Qt 帮助功能:

void QSettings::sync() 将任何未保存的更改写入永久存储,并重新加载其他应用程序在此期间更改的任何设置。这个函数会定期从 QSettings 的析构函数和事件循环中自动调用,因此您通常不需要自己调用它。

这里的“平均时间”究竟是什么意思?这是否总是将我的设置重置为我启动程序时的设置,这意味着在使用 sync() 时,我永远无法在其运行时更改我的配置?

moh*_*uje 5

您可以假设 QSettings 是作为一个全局变量实现的,std::map<QString, QVariant>它的作用类似于设置的缓存。文档说:

QSettings 存储设置。每个设置由一个指定设置名称(键)的 QString 和一个存储与键关联的数据的 QVariant 组成。

出于效率原因,文档说:

为提高效率,更改可能不会立即保存到永久存储中。(您始终可以调用 sync() 来提交您的更改。)

每次修改设置时都会更新缓存值,但不会更新持久文件。QSettings 的行为取决于平台。

如果您想知道它存储/刷新位于硬盘驱动器中的文件的频率,您需要知道它的位置。

您可以使用QStandardPaths类和QStandardPaths::ConfigLocation标记检索路径:

qDebug() << QStandardPaths::writableLocation(QStandardPaths::ConfigLocation);
Run Code Online (Sandbox Code Playgroud)

要跟踪文件中的修改(执行同步功能的频率),您可以使用此python 脚本

回答你的问题: ? 这是否总是将我的设置重置为我启动程序时的设置,这意味着在使用 sync() 时,我永远无法在其运行时更改我的配置?

QSettings::sync合并来自系统文件的修改和缓存中的修改以将其存储在文件中。如果您有多个应用程序修改同一个文件,它们可能会相互覆盖。

在您的情况下,如果您使用的QSettings是保存您自己的应用程序的数据,它不会将任何内容恢复到原始状态。它将始终将您的修改写入文件并使缓存保持最新。