【问题标题】:Is it possible to Serialize QSettings and then recover them?是否可以序列化 QSettings 然后恢复它们?
【发布时间】:2017-12-10 08:56:13
【问题描述】:

我想通过应用程序的两个实例传递使用 QSetting 保存的设置,例如通过套接字。

我在官方文档中看不到任何功能。我唯一读过的就是例如这篇文章

Save Configuration Settings to XML file in QT?

但我不想将设置保存在 XML 文件中,例如在 Windows 中我想继续使用注册表。

我只想收集所有设置,然后通过套接字传递它们。接收方可以检查设置并最终用接收到的设置替换自己的设置。

好吧,我想我可以使用 QSettings::allKeys() 做类似的事情,检查所有值,转换为字符串等等...但是你知道 Qt 中是否已经实现了一些本机函数吗?

提前感谢大家

【问题讨论】:

  • 你可以试试boost::property_treeQSettings 不是为这些东西设计的。但是你可以使用你自己的读写器和QSettings(注册QSettings自定义格式)。
  • 我想你可以为套接字实现自己的WriteFuncReadFunc,应该很难通过网络序列化QMap,可能有一些辅助函数可以甚至使用。
  • 感谢您的评论,但我不想注册其他格式。我想为每个平台使用本机格式。我只想将设置从一个应用程序传递到另一个应用程序。例如在 Windows 中,我想读取注册表中的所有设置并将它们序列化,以便将它们发送到套接字中。它应该更简单......

标签: c++ qt qsettings


【解决方案1】:

我找到的最佳解决方案:

从 QSettings 创建一个 QMap

QMap<QString, QVariant> keysValuesPairs;
QStringList keys = settings.allKeys();
QStringListIterator it(keys);
while ( it.hasNext() )
{
    QString currentKey = it.next();
    keysValuesPairs.insert(currentKey, settings.value(currentKey));
}

然后用函数写在一个QJson中(见官方文档http://doc.qt.io/qt-5/qjsonobject.html

QJsonObject::fromVariantMap

然后在另一边恢复它

QJsonObject::toVariantMap()

并重写设置

for ( int i = 0; i < keys.size(); i++ )
{
    settings.setValue( keys.at(i), keysValuesPairsMap.value(keys.at(i)) );
}

【讨论】:

    猜你喜欢
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多