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

Jul*_*n-L 5 ini qt 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
}
Run Code Online (Sandbox Code Playgroud)

解决方案是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);
}
Run Code Online (Sandbox Code Playgroud)

但我正在寻找一种不修改Params课程的解决方案.

Mik*_*and 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 ) );
    }
}
Run Code Online (Sandbox Code Playgroud)