目录
Qt QSettings断电不保存
官方手册
===============================
Qt QSettings断电不保存
在Linux下Qt的使用QSettings对文件进行修改,断电再启动发现之前的改动并没有保存生效。
QSettings类的sync方法并不能立刻同步到磁盘上。
Qt的保存机制是先写到一个临时文件中,然后定时去同步到磁盘,所以不能实时生效。
这个没有在Qt上并没有找到合适的解决方案。
测试有两种方案
方案一
调用Linux系统的shell命令
system("sync");
这个方法是同步所有内存的信息,弊端懂得都懂哈。
方案二
使用C语言的方式再处理一遍
#include <unistd.h>
QSettings *s = new QSettings("xxx", xxxx);
/*……省略具体写操作……*/
s->sync();
QString path = "xxxxxxxx"//文件路径
QFile file(path);
file.open(QIODevice::ReadOnly);
QByteArray ba = file.readAll();
file.close();
FILE *fp;
fp = fopen(path.toUtf8().data(), "wt+");
fwrite(ba, 1, ba.size(), fp);
fflush(fp);
fsync(fileno(fp));
fclose(fp);
方案二处理方案亲测有效,但是肯定不是最优解,有其他方案的小伙伴,欢迎一起讨论哈
————————————————
版权声明:本文为CSDN博主「hpclinux」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u011251940/article/details/128964771
===============================
官方手册
[static] void QGuiApplication::sync()
Function that can be used to sync Qt state with the Window Systems state.
This function will first empty Qts events by calling QCoreApplication::processEvents(), then the platform plugin will sync up with the windowsystem, and finally Qts events will be delived by another call to QCoreApplication::processEvents();
This function is timeconsuming(耗时的) and its use is discouraged(气馁的;泄气的;灰心丧气).
This function was introduced in Qt 5.2.