保存(已存在)QSetting到INI文件

时间:2012-01-19 17:51:13

标签: qt ini qsettings

我想将一个alredy-existing 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
}

解决方案是在saveTo (QSetting & s)类中添加Params方法:

class Params
{
    void saveTo (QSettings & s)
    {
        s.setValue (...);
    }
};

int main (...)
{
    Params p;
    p.loadGlobal ();
    QSettings bak ("myparams.ini", ...);
    p.saveTo (bak);
}

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

2 个答案:

答案 0 :(得分:9)

嗯,不,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 ) );
    }
}

答案 1 :(得分:-1)

我认为有两个问题:

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

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