来自Qt帮助函数:
void::sync()将任何未保存的更改写入永久存储,并重新加载其他应用程序同时更改的所有设置。此函数由QSettings的析构函数和事件循环定期自动调用,因此通常不需要自己调用它。
“同时”到底是什么意思?这是否总是在启动程序时重置我的设置,这意味着在使用sync()时,我永远无法在运行时更改配置?
发布于 2019-04-05 16:08:47
您可以假设QSettings是作为一个全局std::map<QString, QVariant>实现的,它的作用类似于设置的缓存。文件上说:
QSettings存储设置。每个设置由指定设置名称(键)的QString和存储与键关联的数据的QVariant组成。
出于效率的原因,文件说:
为了提高效率,这些更改可能不会立即保存到永久存储中。(始终可以调用sync()来提交更改。)
每次修改设置时,都会更新缓存值,但不更新持久文件。QSettings的行为取决于平台。
如果您想知道它在硬盘中存储/刷新文件的频率,您需要知道它的位置。
可以使用QStandardPaths类和QStandardPaths::ConfigLocation标记检索路径:
qDebug() << QStandardPaths::writableLocation(QStandardPaths::ConfigLocation);要跟踪文件中的修改(同步函数执行的频率),可以使用此python脚本。
回答你的问题:?这是否总是在启动程序时重置我的设置,这意味着在使用sync()时,我永远无法在运行时更改配置?
QSettings::sync将系统文件中的修改与缓存中的修改合并起来,以将其存储在文件中。如果有多个应用程序修改同一个文件,它们可能会相互覆盖。
在这种情况下,如果使用QSettings保存自己应用程序的数据,则不会将任何数据恢复到原来的状态。它将始终将您的修改写入文件,并保持缓存的最新。
https://stackoverflow.com/questions/55535895
复制相似问题