Qt 将(已存在)QSetting保存到INI文件中

Qt 将(已存在)QSetting保存到INI文件中,qt,ini,qsettings,Qt,Ini,Qsettings,我想将一个alredy现有的QSettings对象保存到某个INI文件中进行备份 QSettings来自应用程序的全局设置,即它可以是注册表、ini文件等 如果有帮助,我的背景是: class Params { // All params as data members // ... void loadGlobal () { Qettings s; // Global parameters, paths set by application

我想将一个alredy现有的
QSettings
对象保存到某个INI文件中进行备份

QSettings
来自应用程序的全局设置,即它可以是注册表、ini文件等


如果有帮助,我的背景是:

class Params
{
    // All params as data members
    // ...
    void loadGlobal ()
    {
        Qettings s; // Global parameters, paths set by application
        // Fill data members: s.value (...);
    }
};

class Algo
{
    Result run (Params p)
    {
        Result r = F(p);
        return r;
    }
};

int main (...)
{
    Params p;
    p.loadGlobal ();
    Algo a;
    Result r = a.run (p);

    // At this point, save Result and Params into a specific directory
    // Is there a way to do:
    p.saveToIni ("myparams.ini"); // <-- WRONG
}

但是我正在寻找一种不修改
参数
类的解决方案。

嗯,不,QT实际上并不直接支持这一点。我认为你最好的选择是编写一个助手类…类似于:

void copySettings( QSettings &dst, QSettings &src )
{
    QStringList keys = src.allKeys();
    for( QStringList::iterator i = keys.begin(); i != keys.end(); i++ )
    {
        dst.setValue( *i, src.value( *i ) );
    }
}

我认为有两个问题:

  • QSettings没有复制构造函数或赋值运算符(据我所知),因此您可能必须使用allKeys()编写自己的副本
  • 您不能将QSettings保存到任意文件中,但可以使用静态方法设置特定格式和作用域的路径QSettings::setPath()。请注意,您需要在创建备份QSettings对象之前执行此操作(您将使用formatIniFormat

如果您可以不完全控制生成的路径,那么这就足够了。如果没有,您仍然可以执行上述操作,然后使用fileName()获取文件名,并使用系统调用将文件复制/移动到所需的最终位置。

您好,感谢您花时间回答。我同意你的第一点。不过,我不同意第二种说法:
QSettings
有一个接受文件名作为参数的ctor(它将在其中存储其内容)。您还可以结合使用
QCoreApplication::setApplicationName()
和QCoreApplication::setOrganization*()`来精确控制
QSettings
的默认路径。。。在回答问题之前,应始终重新阅读文档。
void copySettings( QSettings &dst, QSettings &src )
{
    QStringList keys = src.allKeys();
    for( QStringList::iterator i = keys.begin(); i != keys.end(); i++ )
    {
        dst.setValue( *i, src.value( *i ) );
    }
}