【问题标题】:QSettings:sync When does it sync?QSettings:sync 什么时候同步?
【发布时间】:2019-08-27 09:17:52
【问题描述】:

来自 Qt 帮助功能:

void QSettings::sync() 将任何未保存的更改写入永久存储,并重新加载同时由另一个应用程序更改的任何设置。 该函数由 QSettings 的析构函数自动调用,并且由事件循环定期调用,因此您通常不需要自己调用它。

这里的“同时”到底是什么意思?这是否总是将我的设置重置到我启动程序时的位置,这意味着在使用 sync() 时我永远无法在运行时更改我的配置?

【问题讨论】:

    标签: qt synchronization qsettings


    【解决方案1】:

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

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

    出于效率原因,文档说:

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

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

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

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-05
      • 2012-06-28
      • 2012-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多