前言
前面的博文提到如何实现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,还是有可能出现丢失配置的情况。。。。。。