QSettings 重写 .ini 文件,因此无法恢复值
Posted
技术标签:
【中文标题】QSettings 重写 .ini 文件,因此无法恢复值【英文标题】:QSettings rewriting the .ini file, so not able to restore the values 【发布时间】:2015-06-19 08:08:28 【问题描述】:当我在 Linux SLES 11 机器上使用以下代码时,.ini 文件由于某种原因正在重新创建,因此我无法恢复我的设置。
相同的代码在 Windows 机器上运行良好。
prb:我想在启动窗口有最近打开的文件列表,以便用户可以快速选择。
void Window::saveRecentFileList()
QSettings settings(m_settingsPath, QSettings::NativeFormat);
settings.setValue("recentFiles/list", QVariant(m_recentFilesList));
void Window::restoreRecentFileList()
QSettings settings(m_settingsPath, QSettings::NativeFormat);
m_recentFilesList = settings.value("recentFiles/list").toStringList();
【问题讨论】:
也许restoreRecentFileList
在 saveRecentFileList
之后调用?
@vahancho no 在构造函数中我正在调用 restoreRecentFileList & 在析构函数中我正在调用 saveRecentFileList
你的代码没问题。可能问题出在ini文件或其他代码中。尝试编写一个简单的测试应用。
其他代码实际上很好,我打印 m_recentFilesList 并检查其是否按预期工作,但我观察到,文件是如何重新创建并因此丢失数据的。
【参考方案1】:
尝试使用QSettings::IniFormat
而不是QSettings::NativeFormat
。在 Windows 上,您无论如何都应该使用带有特定 ini 文件位置的 QSettings::IniFormat
。 Linux 使用 ini 文件作为其原生格式来存储设置,但 QSettings documentation 建议:
在所有平台上,如果您想直接读取 INI 文件,您可以 使用将文件名作为第一个参数的 QSettings 构造函数 并将 QSettings::IniFormat 作为第二个参数传递。
【讨论】:
以上是关于QSettings 重写 .ini 文件,因此无法恢复值的主要内容,如果未能解决你的问题,请参考以下文章
QSettings配置读写-win注册表操作-ini文件读写
Qt读写三种文件,QSettings读ini配置文件,QJsonDocument读JSON文件,QDomDocument读xml文件