菜鸟修炼笔记--QT--QSetting->setValue之后退出APP配置丢失问题

本文解决QT应用中使用QSettings设置语言后配置未保存的问题。详细分析setValue不立即回写文件的原因,并提供解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

菜鸟修炼笔记--QT--QSetting->setValue之后退出APP配置丢失问题

前言

前面的博文提到如何实现QT的语言切换:
菜鸟修炼日记–QT–语言切换功能

后面因为需要将语言配置信息写入配置文件中,就用到QT自带的QSettings类。又因为语言切换需要将已经打开的界面都delete之后再new,语言设置才能对这些已经打开的界面生效,但是频繁的delete很容易导致程序出现问题,所以后来就采用了“语言设置完之后就之前退出QT进程,再凭借监控程序再次拉起”的方式。

于是,重点来了,这时候就出现了一个问题:退出QT进程后,设置好的语言配置信息没有写入配置文件中,而我的确执行了QSetiing的文件写入操作:QSetting->setValue。

这是什么灵异事件?为了解决这个问题,在网上换了各种关键词搜索资料,终于找到了解决方法,现记录如下。

一。出问题代码

QSettings *config_setting;
config_setting->setValue(param, value);//写入参数的值
qApp->quit();//退出QT进程

二。问题出现原因

之所以没有生效,是因为setValue函数设置指定KEY的值时,如果已存在则替换先前的值,但它并不立即回写文件,给断电、异常退出提供了丢失数据的机会。而我执行的qApp->quit()就在它判断的异常退出范围内。

三。解决办法

解决办法就是在setValue之后手动加上回写函数QSetting::sync()

	QSettings *config_setting;
   config_setting->setValue(param, value);
   config_setting->sync();//回写函数
   qApp->quit();//退出QT进程

然而,据说就算每个setValue之后都加一个sync,还是有可能出现丢失配置的情况。。。。。。

四。参考资料

QSettings注意的事项

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值