可以使用 QSettings 或其他类在每次启动时存储一些设置(但在启动之间重置)?

Posted

技术标签:

【中文标题】可以使用 QSettings 或其他类在每次启动时存储一些设置(但在启动之间重置)?【英文标题】:Possible to store some settings per launch (but reset between launches) using QSettings or other classes? 【发布时间】:2019-08-13 05:34:52 【问题描述】:

我有一个 Qt 应用程序,我已经在使用 QSettings 在启动之间存储持久状态。但是,我只想在当前会话有效时存储一些类似状态的内容,并且我不希望它们在应用程序的不同启动之间持续存在。

是否有我缺少的QSettings 选项——或者可能是其他一些基于 Qt 的解决方案?还是我基本上坚持自己滚动? (我想是静态的std::hash_map 或其他形式。)

【问题讨论】:

为什么不将这些信息存储在内存中? @vahancho 本质上,我确实想将它存储在内存中。我只是已经在使用QSettings 范式,并且使用相同的范式来存储保留和易失性设置可能会提高可读性。 【参考方案1】:

一个选项可以是使用临时文件(QTemporaryFile 是一种方便的方法)来存储会话设置,因此当您关闭应用程序(或会话,只需关闭两个设置和临时文件):

QTemporaryFile tmpFile;
tmpFile.open();
QSettings sessionSettings(tmpFile.fileName(), QSettings::IniFormat);

只需将临时文件和设置存储在一起,以便它们具有相同的寿命。

上面有两个 cmets:注意 QTemporaryFile::fileName() 返回一个空字符串,直到调用 open。此外,您必须使用基于文件的设置格式,如 INI 或类似格式。

【讨论】:

【参考方案2】:

那为什么要使用 QSettings 呢?相反,您正在寻找一个普通的共享(单例?)哈希图?

引用https://doc.qt.io/qt-5/qsettings.html#details:

如果您只需要一个基于内存的非持久结构,请考虑 改用 QMap。

【讨论】:

以上是关于可以使用 QSettings 或其他类在每次启动时存储一些设置(但在启动之间重置)?的主要内容,如果未能解决你的问题,请参考以下文章

QSettings 重写 .ini 文件,因此无法恢复值

我可以为 2 个或更多应用程序进行 QSettings 设置吗?

不同类型的 QSettings

fontComboBox QSettings 应用程序意外退出

从 IniFormat 和 UserScope 创建的全局 QSettings 对象

Qt QSettings 是不是会在加载后将键/值保留在内存中?