我正在使用Qsettings for non gui产品将其设置存储到xml文件中。这是作为一个在C,C ++程序中使用的库编写的。每个产品将有1个xml文件。每个产品可能有多个子产品,它们通过子产品分组写入xml,如下所示 -
文件:“product1.xml”
<product1>
<subproduct1>
<settings1>..</settings1>
....
<settingsn>..</settingsn>
</subproduct1>
...
<subproductn>
<settings1>..</settings1>
....
<settingsn>..</settingsn>
</subproductn>
</product1>
文件:productn.xml
<productn>
<subproduct1>
<settings1>..</settings1>
....
<settingsn>..</settingsn>
</subproduct1>
...
<subproductn>
<settings1>..</settings1>
....
<settingsn>..</settingsn>
</subproductn>
</productn>
一个进程中的代码执行以下操作 -
settings = new QSettings("product1.xml", XmlFormat);
settings.setValue("settings1",<value>)
sleep(20);
settings.setValue("settings2", <value2>)
settings.sync();
当第一个进程进入休眠状态时,我会启动另一个执行以下操作的进程 -
settings = new QSettings("product1.xml", XmlFormat);
settings.remove("settings1")
settings.setValue("settings3", <value3>)
settings.sync();
我希望settings1能够远离product1.xml文件,但它仍然存在于上述两个进程结束时的文件 - product1.xml中。我没有在我的设置库中使用QCoreApplication(..)。如果上述设计有任何问题,请指出问题。
答案 0 :(得分:1)
这是你正在做的一件奇怪的事情,但有一点需要注意的是,sync()调用实际上是将文件写入磁盘。在这种情况下,如果您希望第二个进程实际看到您所做的更改,那么您需要在第二个进程访问该文件之前调用sync(),以保证它将实际上看到你的修改。因此,我会尝试在settings.sync()
sleep(20)
电话
答案 1 :(得分:0)
也许你必须在delete settings;
之后sync()
确保它没有打开,然后在另一个过程中进行写作?
答案 2 :(得分:0)
这会编译吗?您正在使用什么XmlFormat实现以及哪个操作系统?你的项目中必须有一些特殊的代码用于存储/读取Xml - 这段代码中必须有一些与你期望的不同的东西。