Qt 将(已存在)QSetting保存到INI文件中
我想将一个alredy现有的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
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 ) );
}
}