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();

【问题讨论】:

也许 restoreRecentFileListsaveRecentFileList 之后调用? @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 & unicode

QSettings配置读写-win注册表操作-ini文件读写

QSettings 读/写ini配置文件中的数组数据

Qt读写三种文件,QSettings读ini配置文件,QJsonDocument读JSON文件,QDomDocument读xml文件

QSettings读取INI配置文件带逗号出问题

QSettings读取INI配置文件带逗号出问题