Qt QSettings断电不保存:sync()

176 篇文章 13 订阅

目录

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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值