我想将一个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
类的解决方案。
答案 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)
我认为有两个问题:
如果您没有完全控制生成的路径,那么这就足够了。如果没有,您仍然可以执行上述操作,然后使用 fileName()获取文件名,并使用系统调用将文件复制/移动到所需的最终位置。